存儲過程_遊標

遊標:遊標是指向結果集合行的一個標示

1,,遊標的屬性:
 %found判斷是否發現行,發現返回true
 %notfount判斷是否發現行,沒有發現返回true
 %count返回遊標指向集合的行數
 %isopen判斷遊標是否打開,打開返回true
 %rowtype返回遊標所指向結果集合的行中的字段類型對象

2,聲明一個遊標
cursor 遊標名(參數1,參數2) is
 select eno,ename from emp where...;--遊標所指向的結果集合
 --該遊標專指向這個集合的某一行,從0開始,結果集合行從1開始
 --從英語的角度理解遊標,聲明遊標的語句可以翻譯爲
  "遊標xxx是查詢xx表中的xx,xx,xx字段的"

3,創建遊標變量
 遊標變量用於接收遊標在指向結果集合中的行的字段內容。
 所以遊標變量的類型一定要和查詢出來的集合中的字段類型要一一對應
 i,和普通的變量聲明方式一樣
 c_no number;
 c_name varchar2(20);
 ii,直接指定行
 遊標變量名 遊標名%rowtype;
   --因爲遊標已經指向了一個結果集合,所以可以拿到結果集合行中的字段的數據類型
 使用時,可以使用遊標變量名.字段名的方式。

4,遊標的移動
 fetch 遊標名 into 字段名1,字段名2;
 --fetch命令是將遊標往下移一行並行中的字段內容一一複製給遊給定的字段
 
5,遍歷遊標所指向的集合
 i,第一種方式
 --打開遊標,如果沒有打開則打開
 if 遊標名%isopen = false then
  open 遊標名;
 --先進入循環,後判斷遊標是否指向空行
 loop
   fetch 遊標名 in 字段;
   exit when 遊標名%notfound;
   --沒有退出循環則執行下面的代碼
   dbms_output.put_line(字段1||','||字段2);
 end loop;
 close 遊標名;


 ii,第二種方式
 --打開遊標,如果沒有打開則打開
 if 遊標名%isopen = false then
  open 遊標名;
 --先移動遊標後判斷遊標是否指向非空行
 fetch 遊標名 into 字段1,字段2;
 while 遊標名%found
    loop
       dbms_output.put_line(字段1||','||字段2);
       fetch 遊標名 into 字段1,字段2;--執行完業務代碼後,將遊標下移,調至循環條件進行判斷
    end loop;
    ....
    close 遊標名;--關閉遊標

遊標在應用中的作用::
 在項目當中如果經常需要做查詢數據,所以可以通過存儲過程來實現。
 而返回的就是一個遊標

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章