Oracle 游标

SQL> set serveroutput on; --开启客户端输出
SQL> declare --申明
2 cursor(游标) empcur(游标名) is select empno,ename,sal from emp where deptno=20; --查询数据放到游标中
3 t_empno emp.empno%type; --设置变量的数据类型
4 t_ename emp.ename%type; --设置变量的数据类型
5 t_sal emp.sal%type; --设置变量的数据类型
6 begin --开始
7 open empcur; --打开游标
8 loop --循环读取游标数据
9 fetch empcur into t_empno,t_ename,t_sal; 读取游标的数据放到变量中
10 exit when empcur%notfound; --判断游标所在行是否有效、无效推出
11 dbms_output.put_line('编号 :'||t_empno||' 姓名:'||t_ename||' 工资:'||t_sa --输出从游标中读取的数据
l);
12 end loop; --结束游标的循环读取数据
13 close empcur; --关闭游标
14 end ;
15 /
编号 :7369 姓名:SMITH 工资:800
编号 :7566 姓名:JONES 工资:2975
编号 :7788 姓名:SCOTT 工资:3000
编号 :7876 姓名:ADAMS 工资:1100
编号 :7902 姓名:FORD 工资:3000
-----------------------------------------------------------------
Rowtype变量

SQL> set serveroutput on; --开启客户端输出
SQL> declare --申明
2 emprow emp%rowtype; --判断变量的数据类型
3 cursor empcur is select * from emp where deptno=30; --查询数据放到游标中
4 begin --开始
5 open empcur; --开启游标
6 loop
7 fetch empcur into emprow; --读取的游标的数放到变量中
8 exit when empcur%notfound; --判断游标所在行是否有效
9 dbms_output.put_line('编号:'||emprow.empno||' 员工姓名:'||emprow.ename||'
工资:'||emprow.sal||' 工作:'||emprow.job); --输出游标中读取的数据
10 end loop; --结束游标的循环
11 close empcur; --关闭游标
12 end;
13 /
编号:7499 员工姓名:ALLEN 工资:1600 工作:SALESMAN
编号:7521 员工姓名:WARD 工资:1250 工作:SALESMAN
编号:7654 员工姓名:MARTIN 工资:1250 工作:SALESMAN
编号:7698 员工姓名:BLAKE 工资:2850 工作:MANAGER
编号:7844 员工姓名:TURNER 工资:1500 工作:SALESMAN
编号:7900 员工姓名:JAMES 工资:950 工作:CLERK

PL/SQL procedure successfully completed.

-----------------------------------------------------------------
带参数的游标

SQL> set serveroutput on; --开启客户端的输出
SQL> declare --申明
2 thedeptno emp.deptno%type; --设置变量的数据类型
3 emprow emp%rowtype; --设置变量的数据类型
4 cursor empcur(deldeptno emp.deptno%type) is select * from emp where deptno=
deldeptno; --查询数据放到游标中
5 begin
6 thedeptno := & 请输入部门编号; --给变量赋值、加以一个&表示可接受一个用户输入的参数
7 open empcur(thedeptno); --打开游标、(参数表示用户输入的)
8 loop
9 fetch empcur into emprow; --读取游标的数据放到变量中
10 exit when empcur%notfound; --判断游标所在行的是否有效
11 dbms_output.put_line('编号:'||emprow.empno||' 员工姓名:'||emprow.ename||' --输出从变量中的数据
工作:'||emprow.job);
12 end loop; --结束、游标的循环
13 close empcur; --关闭游标
14 end;
15 /
Enter value for 请输入部门编号: 20
old 6: thedeptno := & 请输入部门编号;
new 6: thedeptno := 20;
编号:7369 员工姓名:SMITH 工作:CLERK
编号:7566 员工姓名:JONES 工作:MANAGER
编号:7788 员工姓名:SCOTT 工作:ANALYST
编号:7876 员工姓名:ADAMS 工作:CLERK
编号:7902 员工姓名:FORD 工作:ANALYST

PL/SQL procedure successfully completed.

------------------------------------------------------------------------
循环游标修改数据
SQL> set serveroutput on; --开启客户端输出
SQL> declare --申明
2 emprow emp%rowtype; --判断变量的数据类型上
3 cursor empcur is select * from emp for update; --查询数据放到游标中(for update 更新数据)
4 begin
5 for emprow in empcur
6 loop
7 if emprow.deptno= 20 then
8 dbms_output.put_line('被更改的工资 :'||emprow.sal);
9 update emp set sal=sal*1.2 where current of empcur;
10 end if;
11 end loop;
12 end;
13 /
被更改的工资 :960
被更改的工资 :3570
被更改的工资 :3600
被更改的工资 :1320
被更改的工资 :3600

PL/SQL procedure successfully completed.
----------------------------------------------------------------------
s
SQL> set serveroutput on;
SQL> declare
2 type curemptype is ref cursor;
3 curemp_ref curemptype;
4 command char(1);
5 currow emp%rowtype;
6 theename emp.ename%type;
7 begin
8 dbms_output.put_line('请输入操作命令:1-查询DEPTNO=30的员工姓名,2-查询JOB=
MANAGER的员工信息');
9 command :=&命令;
10 if command='1'
11 then dbms_output.put_line('输入命令:1');
12 open curemp_ref for select ename from emp where deptno=30;
13 loop
14 fetch curemp_ref into theename;
15 exit when curemp_ref%notfound;
16 dbms_output.put_line(theename);
17 end loop;
18 close curemp_ref;
19 else
20 dbms_output.put_line('输入命令:2');
21 open curemp_ref for select * from emp where job='MANAGER';
22 loop
23 fetch curemp_ref into currow;
24 exit when curemp_ref%notfound;
25 dbms_output.put_line('工号 :'||currow.empno||' 姓名:'||currow.ename||'
部门编号:'||currow.job);
26 end loop;
27 close curemp_ref;
28 end if;
29 end;
30 /
Enter value for 命令: 2
old 9: command :=&命令;
new 9: command :=2;
请输入操作命令:1-查询DEPTNO=30的员工姓名,2-查询JOB=MANAGER的员工信息
输入命令:2
工号 :7566 姓名:JONES 部门编号:MANAGER
工号 :7698 姓名:BLAKE 部门编号:MANAGER
工号 :7782 姓名:CLARK 部门编号:MANAGER

PL/SQL procedure successfully completed.

SQL>

-------------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值