Oracle游标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle游标相关的知识,希望对你有一定的参考价值。
--游标的属性
SQL> set serveroutput on
SQL> declare --声明
2 var_ename varchar2(50);--声明变量,用来存储员工姓名
3 var_job varchar2(50);
4 cursor cur_emp 定义游标,检索指定属性的记录
5 is select ename,job from emp
6 where empno = 7499;
7 begin
8 open cur_emp; 打开游标
9 fetch cur_emp into var_ename,var_job; --读取游标,并存储员工姓名和职务
10 if cur_emp%found then --如果数据存在则显示
11 dbms_output.put_line(‘编号7499的员工名称为: ‘||var_ename||‘,职务是:‘||var_job);
12 else --否则,执行下面
13 dbms_output.put_line(‘无数据记录‘);
14 end if;--结束条件语句
15 end;--结束游标过程
16 /
-- 输出的结果为:
编号7499的员工名称为: ALLEN,职务是:SALESMAN
--显示游标
SQL> set serveroutput on
SQL> declare /*声明游标,检索员工信息*/
2 cursor cur_emp(var_job in varchar2:=‘SALESMAN‘)
3 is select empno,ename,sal
4 from emp
5 where job = var_job;
6 type record_emp is record --声明一个record类型的记录
7 (
8 var_empno emp.empno%type,
9 var_ename emp.ename%type,
10 var_sal emp.sal%type
11 );
12 emp_row record_emp;
13 begin
14 open cur_emp(‘MANAGER‘);
15 fetch cur_emp into emp_row; --先让指针指向结果集中的第一行,并将值保存到emp_row中
16 while cur_emp%found loop
17 dbms_output.put_line(emp_row.var_ename||‘的编号是‘||emp_row.var_empno||‘,工资是‘||emp_row.var_sal);
18 fetch cur_emp into emp_row; --先让指针指向结果集中的下一行,并将值保存到emp_row中
19 end loop;
20 close cur_emp; 关闭游标
21 end;
22 /
结果如下:
JONES的编号是7566,工资是2975
BLAKE的编号是7698,工资是2850
CLARK的编号是7782,工资是2450
SQL> --隐式游标
SQL> set serveroutput on
SQL> begin
2 update emp
3 set sal=sal*(1+02)
4 where job = ‘SALESMAN‘;
5 if sql%notfound then //若update语句没有影响的任一行数据
6 dbms_output.put_line(‘没有雇员需要上调工资‘);
7 else //若update语句至少影响到一行数据
8 dbms_output.put_line(‘有‘||sql%rowcount||‘个雇员工资上调20%‘);
9 end if;
10 end;
11 /
结果:
有4个雇员工资上调20%
在for语句中遍历隐式游标中的数据时,通常在关键字"in"的后面提供由SELECT语句检索的结果集,在检索结果集的过程中,Oracle系统会自动提供一个隐式游标sql.
使用隐式游标和for语句检索出职务是销售员的雇员信息并输出,代码如下:
SQL> set serveroutput on
SQL> begin
2 for emp_record in (select empno,ename,sal from emp where job =‘SALESMAN‘)
3 loop
4 dbms_output.put_line(‘雇员编号‘||emp_record.empno);
5 dbms_output.put_line(‘;雇员名称‘||emp_record.ename);
6 dbms_output.put_line(‘;雇员工资:‘||emp_record.sal);
7 end loop;
8 end;
9 /
雇员编号7499
雇员名称ALLEN
;雇员工资:4800
雇员编号7521
雇员名称WARD
;雇员工资:3750
雇员编号7654
雇员名称MARTIN
;雇员工资:3750
雇员编号7844
雇员名称TURNER
;雇员工资:4500
使用显式游标和for语句检索出部门编号是30的雇员信息并输出,代码如下
SQL> set serveroutput on
SQL> declare
2 cursor cur_emp is
3 select * from emp
4 where deptno =30;
5 begin
6 for emp_record in cur_emp
7 loop
8 dbms_output.put_line(‘雇员编号:‘||emp_record.empno);
9 dbms_output.put_line(‘雇员名称:‘||emp_record.ename);
10 dbms_output.put_line(‘雇员职务:‘||emp_record.job);
11 end loop;
12 end;
13 /
雇员编号:7499
雇员名称:ALLEN
雇员职务:SALESMAN
雇员编号:7521
雇员名称:WARD
雇员职务:SALESMAN
雇员编号:7654
雇员名称:MARTIN
雇员职务:SALESMAN
雇员编号:7698
雇员名称:BLAKE
雇员职务:MANAGER
雇员编号:7844
雇员名称:TURNER
雇员职务:SALESMAN
雇员编号:7900
雇员名称:JAMES
雇员职务:CLERK
以上是关于Oracle游标的主要内容,如果未能解决你的问题,请参考以下文章