欢迎来到天天文库
浏览记录
ID:28100641
大小:39.50 KB
页数:14页
时间:2018-12-08
《oracle中游标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_
2、salry%notfound;updateneu_studysetfact_salry=fact_salry+100whererow_id=v_id;endloop;closec_salry;end;commit;endpro_salryadd;四个步骤:1.声明游标2.在执行部分使用游标,在用之前要打开游标3.用游标做提 取结果的动作4.工作完后要关闭游标(关闭以后就不能使用了,不能重复关闭)四个步骤的代码实现如下:DECLAREv_emps_emp%ROWTYPE;v_depts_emp.dep
3、t%TYPE;CURSORcur_empISSELECT*FROMs_empWHEREdept=v_dept;BEGINOPENcur_emp;FETCHcur_empINTOv_emp;DBMS_OUTPUT.PUT_LINE(v_emp.id
4、
5、''
6、
7、v_emp.last_name);CLOSEcur_emp;--FETCHcur_empINTOv_emp;关闭游标后就不能再访问游标--CLOSEcur_emp;不能重复关闭游标END;游标一般跟循环语句配合使用,那就要知道游标的四个属性关于游
8、标的四个属性%ROWCOUNT当前游标所处理的行数,例如cur_emp%ROWCOUNT(它是一个数,可以直 接使用)%ISOPEN判断此游标是否被打开cur_emp%ISOPENdeclarev_emps_emp%rowtype;cursorcur_empisselect*froms_emp;beginopencur_emp;loopfetchcur_empintov_emp;exitwhencur_emp%notfound;dbms_output.put_line(v_emp.id
9、
10、''
11、
12、v
13、_emp.first_name);ifcur_emp%isopenthendbms_output.put_line('true');elsedbms_output.put_line('false');endif;endloop;CLOSEcur_emp;end;%FOUND返回的是检查上一次FETCH语句的结果,如果上一次FETCH语句找到一条记录 ,那么FOUND返回真,如果没有知道就返回假%NOTFOUND与%FOUND相反1)%FOUNDDECLAREv_emps_emp%ROWTYPE;CU
14、RSORcur_empISSELECT*FROMs_emp;BEGINOPENcur_emp;FETCHcur_empINTOv_emp;WHILEcur_emp%FOUNDLOOPDBMS_OUTPUT.PUT_LINE(v_emp.id
15、
16、''
17、
18、v_emp.first_name);DBMS_OUTPUT.PUT_LINE(cur_emp%ROWCOUNT);FETCHcur_empINTOv_emp;ENDLOOP;CLOSEcur_emp;END;2)%NOTFOUNDDECLAREv_em
19、ps_emp%ROWTYPE;CURSORcur_empISSELECT*FROMs_emp;BEGINOPENcur_emp;LOOPFETCHcur_empINTOv_emp;EXITWHENcur_emp%NOTFOUND;DBMS_OUTPUT.PUT_LINE(v_emp.id
20、
21、' '
22、
23、v_emp.first_name);DBMS_OUTPUT.PUT_LINE(cur_emp%ROWCOUNT);ENDLOOP;CLOSEcur_emp;END;CURSOR与两种循环的配合使用1)与
24、简单循环的配合使用如下:LOOPEXITWHENcur_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
25、
26、' '
27、
28、v_emp.first_name);DBMS
此文档下载收益归作者所有