游标实例与返回结果集的存储过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
/