欢迎来到天天文库
浏览记录
ID:56873808
大小:39.50 KB
页数:14页
时间:2020-07-17
《orace中游标cursor的使用及定时器job用法(网上收集加整理的).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、游标的用法(游标是一种类似与迭代器的东西)给实际工资加100:createorreplaceprocedurepro_salryaddisbegindeclarev_salryneu_study.fact_salry%type;v_idneu_study.row_id%type;cursorc_salryisselectfact_salry,row_idfromneu_study;beginopenc_salry;loopfetchc_salryintov_salry,v_id;exitwhenc_salry%notfound;updateneu_studysetfact_salry=fa
2、ct_salry+100whererow_id=v_id;endloop;closec_salry;end;commit;endpro_salryadd;四个步骤:1.声明游标2.在执行部分使用游标,在用之前要打开游标3.用游标做提 取结果的动作4.工作完后要关闭游标(关闭以后就不能使用了,不能重复关闭)四个步骤的代码实现如下:DECLAREv_emps_emp%ROWTYPE;v_depts_emp.dept%TYPE;CURSORcur_empISSELECT*FROMs_empWHEREdept=v_dept;BEGINOPENcur_emp;FETCHcur_empINTOv_em
3、p;DBMS_OUTPUT.PUT_LINE(v_emp.id
4、
5、''
6、
7、v_emp.last_name);CLOSEcur_emp;--FETCHcur_empINTOv_emp;关闭游标后就不能再访问游标--CLOSEcur_emp;不能重复关闭游标END;游标一般跟循环语句配合使用,那就要知道游标的四个属性关于游标的四个属性%ROWCOUNT当前游标所处理的行数,例如cur_emp%ROWCOUNT(它是一个数,可以直 接使用)%ISOPEN判断此游标是否被打开cur_emp%ISOPENdeclarev_emps_emp%rowtype;cursorcur_empisselect*
8、froms_emp;beginopencur_emp;loopfetchcur_empintov_emp;exitwhencur_emp%notfound;dbms_output.put_line(v_emp.id
9、
10、''
11、
12、v_emp.first_name);ifcur_emp%isopenthendbms_output.put_line('true');elsedbms_output.put_line('false');endif;endloop;CLOSEcur_emp;end;%FOUND返回的是检查上一次FETCH语句的结果,如果上一次FETCH语句找到一条记录 ,那么FOUND
13、返回真,如果没有知道就返回假%NOTFOUND与%FOUND相反1)%FOUNDDECLAREv_emps_emp%ROWTYPE;CURSORcur_empISSELECT*FROMs_emp;BEGINOPENcur_emp;FETCHcur_empINTOv_emp;WHILEcur_emp%FOUNDLOOPDBMS_OUTPUT.PUT_LINE(v_emp.id
14、
15、''
16、
17、v_emp.first_name);DBMS_OUTPUT.PUT_LINE(cur_emp%ROWCOUNT);FETCHcur_empINTOv_emp;ENDLOOP;CLOSEcur_emp;END;
18、2)%NOTFOUNDDECLAREv_emps_emp%ROWTYPE;CURSORcur_empISSELECT*FROMs_emp;BEGINOPENcur_emp;LOOPFETCHcur_empINTOv_emp;EXITWHENcur_emp%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp.id
19、
20、' '
21、
22、v_emp.first_name);DBMS_OUTPUT.PUT_LINE(cur_emp%ROWCOUNT);ENDLOOP;CLOSEcur_emp;END;CURSOR与两种循环的配合使用1)与简单循环的配合使用如下:LOOPEXITWHEN
23、cur_emp%NOTFOUND;ENDLOOP;例如:DECLAREv_emps_emp%ROWTYPE;CURSORcur_empISSELECT*FROMs_emp;BEGINOPENcur_emp;LOOPFETCHcur_empINTOv_emp;EXITWHENcur_emp%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp.id
24、
25、' '
26、
27、v_emp.first_name);DBMS
此文档下载收益归作者所有