游标实例与返回结果集的存储过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

游标实例:

declare

cursoremp_cursor(dept_num number:=20)

is

selectename,sal from emp where deptno=dept_num;

v_enameemp.ename%type;

v_salemp.sal%type;

--可以使用下面的定义方法,代替上面两个变量

--one_empemp_cursor%rowtype;

begin

openemp_cursor(&dnum);

loop

fetchemp_cursor into v_ename,v_sal;

--判断工资低于2000,增加工资

--if(v_sal<2000)

--then update emp set sal=sal*(1.1) where ename=v_ename;

--end if;

exit when emp_cursor%NOTFOUND;

dbms_output.put_line('当前检索的是第'||emp_cursor%rowcount||'行:'||v_ename||','||v_sal);

end loop;

closeemp_cursor;

end;

declare

--定义游标sp_emp_cursor

typesp_emp_cursor is ref cursor;

--定义一个游标变量

test_cursorsp_emp_cursor;

--定义变量

v_enameemp.ename%type;

v_salemp.sal%type;

begin

--执行

--把test_cursor和一个select结合

opentest_cursor for select ename,sal from emp where deptno=&no;

--循环取出

loop

fetchtest_cursor into v_ename,v_sal;

--判断是否test_cursor为空

exit when test_cursor%notfound;

dbms_output.put_line('名字:'||v_ename||' 工资:'||v_sal);

end loop;

end;

返回结果集的存储过程实例及调用

--创建一个包,定义一个游标类型,为存储过程的输出参数使用

create or replace package sp_emp_pk as

typesp_emp_cursor is ref cursor;

endsp_emp_pk;

/

--创建返回结果集的存储过程

create or replace PROCEDURE sproc_cursor(deptnum in number,emp_cursor out sp_emp_pk.sp_emp_cursor) is

begin

openemp_cursor for select ename,sal from emp where deptno=deptnum;

endsproc_cursor;

/

--返回结果集的存储过程的调用

declare

typesp_emp_cursor is ref cursor;

emp_cursorsp_emp_cursor;

--v_empnoemp.empno%type:=7839;

v_deptnoemp.deptno%type:=10;

v_enameemp.ename%type;

v_salemp.sal%type;

begin

sproc_cursor(v_deptno,emp_cursor);

loop

fetchemp_cursor into v_ename,v_sal;

exit when emp_cursor%notfound;

--sp_pro8(v_empno,v_ename);

dbms_output.put_line(v_ename);

end loop;

--dbms_output.put_line('Hello world');

closeemp_cursor;

end;

/

相关文档
最新文档