儲存過程遍歷游標三種方式

2021-07-09 23:55:43 字數 1468 閱讀 6708

create

orreplace

procedure prc_lj is

cursor c_emp is

--聲明顯式游標

select empno,

ename

from emp;  

c_row c_emp%rowtype; --定義游標變數,該變數的型別為基於游標c_emp的記錄

begin

--for 迴圈

for c_row in c_emp loop  

dbms_output.put_line(c_row.empno || '--' || c_row.ename);  

end loop;  

--fetch 迴圈

open c_emp;--必須要明確的開啟和關閉游標

loop  

fetch c_emp  

into c_row;  

exit when c_emp%notfound;  

dbms_output.put_line(c_row.empno || '++' || c_row.ename);  

end loop;  

close c_emp;  

--while 迴圈

open c_emp;--必須要明確的開啟和關閉游標

fetch c_emp into c_row;  

while c_emp%found loop  

dbms_output.put_line(c_row.empno || '**' || c_row.ename);  

fetch c_emp into c_row;  

end loop;  

close c_emp;  

end prc_lj; 

第一種使用for 迴圈

for迴圈是比較簡單實用的方法。 

首先,它會自動open和close游標。解決了你忘記開啟或關閉游標的煩惱。 

其次,自動宣告乙個記錄型別及定義該型別的變數,並自動fetch資料到這個變數。 

注意c_row 這個變數無需要在迴圈外進行宣告,無需為其指定資料型別。它是乙個記錄型別,具體的結構是由游標決定的。

這個變數的作用域僅僅是在迴圈體內。

最後,與該游標關聯的所有記錄都已經被取回後,迴圈無條件結束,不必判定游標的%notfound屬性為true。

for迴圈是用來迴圈游標的最好方法。高效,簡潔,安全。

第二種使用fetch迴圈

注意,exit when語句一定要緊跟在fetch之後,避免多餘的資料處理。 

處理邏輯需要跟在exit when之後。 

迴圈結束後要記得關閉游標。

第三種使用while迴圈

使用while 迴圈時,需要在迴圈之前進行一次fetch動作,游標的屬性才會起作用。

而且資料處理動作必須放在迴圈體內的fetch方法之前,迴圈體內的fetch方法要放在最後,否則就會多處理一次。

List遍歷 三種方式

對list的遍歷有三種方式 listlist new arraylist list.add new a list.add new a 第一種 for iteratorit list.iterator it.hasnext 這種方式在迴圈 執行過程中會進行資料鎖定,效能稍差,同時,如果你想在尋歡過程中...

遍歷List的三種方式

對list的遍歷有三種方式 listlist new arraylist list.add new a list.add new a 第一種 for iteratorit list.iterator it.hasnext 這種方式在迴圈 執行 過程中會進行資料鎖定,效能稍差,同時,如果你想在尋歡過程...

Java List遍歷的三種方式

mapmap newhashmap map.put key1 value1 map.put key2 value2 map.put key3 value3 第一種 普遍使用,二次取值 system.out.println 通過map.keyset遍歷key和value for string key ...