资源描述:
《oracle游标的使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十二章光标的使用光标的概念Oracle光标是一种用于轻松的处理多行数据的机制。当PL/SQL光标查询返回多行数据时,这些记录组被称为结果集。Oracle将这种活动集存储在您创建的显示定义的已命名的光标中。没有光标,Oracle开发人员必须单独地、显式地取回并管理光标查询选择的每一条记录。12.1光标的定义与使用显式光标处理需四个PL/SQL步骤:cursor光标名称is查询语句;open光标名称;Fetch光标名称into变量列表;Close光标名称;12.1光标的定义与使用例1.declarecursorc1isselectename,salfromempwherer
2、ownum<11;v_enamevarchar2(10);v_salnumber(7,2);beginopenc1;fetchc1intov_ename,v_sal;whilec1%foundloopdbms_output.put_line(v_ename
3、
4、to_char(v_sal));fetchc1intov_ename,v_sal;endloop;closec1;end;12.1光标的定义与使用2.光标属性%found布尔型属性,当最近一次读记录时成功返回,则值为true%nofound布尔型属性,与%found相反.%isopen布尔型属性,当光标已打开时返回t
5、rue.%rowcount数字型属性,返回已从光标中读取得记录数.12.1光标的定义与使用3.参数化光标在声明光标时,将未确定的参数说明成变量,在使用光标时给出光标变量的具体值(相当于实参)使得语句可以按照给出的条件进行查询。12.1光标的定义与使用例2:DECLARECursorc1(view_patternvarchar2)ISSelectview_namefromall_viewsWhereview_namelikeview_pattern’
6、
7、%ANDrownum<=10Orderbyview_name;Vnamevarchar2(40);BEGINForI1in
8、c1(‘DBA’)loopDBMS_OUTPUT.PUT_LINE(I1.view_name);ENDloop;END;12.1光标的定义与使用处理隐式光标所有的SQL语句在上下文区内部都是可执行的,因此都有一个光标指向上下文区,此光标就是所谓的SQL光标(SQLcursor),与显式光标不同,SQL光标不被程序打开和关闭。12.1光标的定义与使用例3:--节自在线代码nomat1.sqlBEGINUPDATEroomsSETnumber_seats=100WHEREroom_id=99980;--如果更新没有匹配则插入一新行IFSQL%NOTFOUNDTHENINSER
9、TINTOrooms(room_id,number_seats)VALUES(99980,100);ENDIF;END;12.1光标的定义与使用例4:--节自在线代码nomat2.sqlBEGINUPDATEroomsSETnumber_seats=100WHEREroom_id=99980;--如果更新没有匹配则插入一新行IFSQL%ROWCOUNT=0THENINSERTINTOrooms(room_id,number_seats)VALUES(99980,100);ENDIF;END;12.1光标的定义与使用例5:--节自在线代码nodata.sqlDECLAREV
10、_roomdatarooms%ROWTYPE;BEGINSelect*intov_roomdatafromroomsWhereroom_id=-1;IFSQL%NOFOUNDTHENINSERTINTOtemp_table(char_col)VALUES(‘NotFound!‘);ENDIF;EXCEPTIONWHENNO_DATA_FOUNDTHENINSERTINTOtemp_table(char_col)VALUES(‘NotFound!exceptionhandle.‘);END;12.2光标循环在高级语言编程和PL/SQL编程中,经常使用“提取循环(fetchl
11、oop)”来实现逐行提取所需数据的方法。12.2光标循环LOOP和ENDLOOP来实现简单循环。DECLAREV_studentIDstudents.id%TYPE;V_firstNamestudents.first_name%TYPE;V_LastNamestudents.last_name%TYPE;CURSORc_HistoryStudentsISSELECTid,first_name,last_namefromstudentsWHEREmajor=‘History’;BEGINOpenc_HistoryStudents