1. 程式人生 > >PL/SQL基礎知識講解之遊標 (CURSOR)

PL/SQL基礎知識講解之遊標 (CURSOR)

該篇繼續學習pl/sql基礎知識,主要介紹一個姿勢點:“遊標”。
首先要知道遊標是幹嘛的?
在pl/sql程式設計中,我們通常處理多行事務是通過遊標來實現的(這個可以類比java中迭代器概念)
遊標是一個指向上下文的控制代碼和指標,通過遊標pl/sql可以控制上下文區和處理語句時上下文會發生一些事情。
???(有點抽象哦,別慌,慢慢往下看就懂了)
對於不同的sql語句遊標的使用情況又是不同的,如下:
對於非查詢語句 : 遊標是隱式的;
對於結果為單行的查詢語句:遊標是隱式的或顯示的;
對於結果為多行的查詢語句:遊標是顯示

(1)顯式遊標

第一步:定義遊標
CURSOR cursor_name [(param1,parame2..)] IS SELECT ….
//後面接的是一個查詢語句,一般都是返回多行的那種。其中引數param可帶可不帶,根據需要,引數的定義也要定義引數名,引數型別等(這裡特別要主要的是在指定引數型別的時候不需要指定型別大小 如number(20),這都是錯的)
第二步:開啟遊標

開啟遊標實質就是執行遊標對應的select語句,然後將查詢結果儲存在工作區中,然後將遊標指向結果集中的第一行資料,而且如果select語句中有for update,則open的同時還會鎖定查詢結果集所對應的表中的行資料。
OPEN cursor_name [value,value2…]
pl/sql中不能使用open重複開啟同一個遊標
第三步:提取資料 就是檢索結果集中的資料行,放入到指定的輸出變數。
fetch cursor_name into {variable_list | record_variable };
對該記錄進行處理,
繼續處理,直到結果集中沒有記錄
第四步:關閉遊標
,釋放遊標所佔有的資源,同時使該工作區變為無效,不能再使用fetch提取資料,可以使用open重新開啟。
close cursor_name;

下面就通過一些例項來看看遊標到底怎麼用的吧。
如:查詢員工表前十名的員工的資訊
declare
v_sal employees.salary%type;
v_name employee.last_name%type;
cursor empcursor is select last_name,salary from employees where rownum <11 order by desc;
begin
–開啟遊標
open empcursor ;
–提取資料;
fetch empcursor into v_name,v_sal ;
while empcursor%found loop
dbms_output.put_line(v_name||’,’||v_sal);
fetch empcursor into v_name,sal;
end loop;
close empcursor;
end;

在演示一下帶引數的(rownum根據引數確定)
declare
v_sal employees.salary%type;
v_name employee.last_name%type;
cursor empcursor(empno number default 11) is select last_name,salary from employees where rownum