打開光標
打開光標的語法如下
OPEN cursor_name
其中cursor_name是您以前定義的光標名稱
打開光標將激活查詢並識別活動集可是在執行光標取回命令之前並沒有真正取回記錄OPEN命令還初始化了光標指針使其指向活動集的第一條記錄光標被打開後直到關閉之前取回到活動集的所有數據都是靜態的換句話說光標忽略所有在光標打開之後對數據執行的SQL DML命令(INSERTUPDATEDELETE和SELECT)因此只有在需要時才打開它要刷新活動集只需關閉並重新打開光標即可
從光標中取回數據
FETCH命令以每次一條記錄的方式取回活動集中的記錄通常將FETCH命令和某種迭代處理結合起來使用在迭代處理中FETCH命令每執行一次光標前進到活動集的下一條記錄
FETCH命令的語法
FETCH cursor_name INTO record_list
其中cursor_name是前面定義的光標的名稱record_list是變量列表它接收活動集中的列FETCH命令將活動集的結果放置到這些變量中
執行FETCH命令後活動集中的結果被取回到PL/SQL變量中以便在PL/SQL塊中使用每取回一條記錄光標的指針就移向活動集的下一條記錄
例
FETCH C INTO VNAME;
WHILE C%FOUND LOOP
DBMS_OUTPUTPUT_LINE(TO_CHAR(C%ROWCOUNT)|| ||VNAME);
END LOOP;
其中使用屬性%FOUND使得當FETCH到達活動集的結尾時不會引發異常其它屬性及含義見下表
屬性 含量
%FOUND 布爾型屬性當最近一次該記錄時成功返回則值為TRUE
%NOTFOUND 布爾型屬性它的值總與%FOUND屬性的值相反
%ISOPEN 布爾型屬性當光標是打開時返回TRUE
%ROWCOUNT 數字型屬性返回已從光標中讀取的記錄數
屬性 含量
%FOUND 布爾型屬性當最近一次該記錄時成功返回則值為TRUE
%NOTFOUND 布爾型屬性它的值總與%FOUND屬性的值相反
%ISOPEN 布爾型屬性當光標是打開時返回TRUE
%ROWCOUNT 數字型屬性返回已從光標中讀取的記錄數
關閉光標
CLOSE語句關閉以前打開的光標使得活動集不確定當用戶的程序或會話結束時Oracle隱式關閉光標光標被關閉後就不能對它執行任何操作了否則將引發異常
CLOSE語句的語法是
CLOSE cursor_name
其中cursor_name是以前打開的光標的名稱
[] [] []
From:http://tw.wingwit.com/Article/program/SQL/201311/16421.html