熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

PL/SQL用光標查詢多條記錄

2022-06-13   來源: Oracle 

  PL/SQL光標為程序提供了從數據庫中選擇多行數據然後對每行數據單獨進行處理的方法它為Oracle提供了一種指示和控制SQL處理的各個階段的方法我將認為您已經對PL/SQL有一定的了解通過本文您將學會

  光標的創建
光標的處理
定義和使用光標屬性
什麼是光標
Oracle使用兩種光標顯式光標和隱式光標不管語句返回多少條紀錄PL/SQL為使用的每一條UPDATEDELETE和INSERT等SQL命令隱式的聲明一個光標(要管理SQL語句的處理必須隱式的給它定義一個光標)用戶聲明並使用顯示光標處理SELECT語句返回的多條記錄顯示的定義光標一種結構它使用戶能夠為特定的語句指定內存區域以便以後使用

  二 光標的作用
當PL/SQL光標查詢返回多行數據時這些記錄組被稱為活動集Oracle將這種活動集存儲在您創建的顯示定義的已命名的光標中Oracle光標是一種用於輕松的處理多行數據的機制沒有光標Oracle開發人員必須單獨地顯式地取回並管理光標查詢選擇的每一條記錄
光標的另一項功能事它包含一個跟蹤當前訪問的記錄的指針這使您的程序能夠一次處理多條記錄

  三 使用顯示光標的基本方法
步驟如下

  聲明光標
打開光標
從光標中取回數據
關閉光標
聲明光標
聲明光標的語法如下
DECLARE cursor_name
Is
SELECT statement

  其中cursor_name是您給光標指定的名稱SELECT statement是給光標活動集返回記錄的查詢
聲明光標完成了下面兩個目的
給光標命名
將一個查詢與光標關聯起來
值得注意的是必須在PL/SQL塊的聲明部分聲明光標給光標指定的名稱是一個未聲明的標識符而不是一個PL/SQL變量不能給光標名稱賦值也不能將它用在表達式中PL/SQL塊使用這個名稱來引用光標查詢
DECLARE
CURSOR c
Is
SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<=
另外還可以在光標定義語句中聲明光標的參數
CURSOR c(view _nbr number)
Is
SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<= view _nbr

  光標參數只對相應的光標是可見的不能在光標范圍之外引用該光標的參數如果試圖這樣做Oracle將返回一個錯誤指出該變量沒有定義
打開光標
打開光標的語法如下
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是以前打開的光標的名稱
完整的程序代碼如下
DECLARE
CURSOR C IS SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<=
ORDER BY VIEW_NAME;
VNAME VARCHAR();
BEGIN
OPEN C;
FETCH C INTO VNAME;
WHILE C%FOUND LOOP
DBMS_OUTPUTPUT_LINE(TO_CHAR(C%ROWCOUNT)||||VNAME);
END LOOP;
END;
……CLOSE C;
 

  四 小結
光標是一種結構能夠以一次一條記錄的方式處理多行查詢的結果為每條DML語句創建隱式光標而顯式光標是由用戶創建的以便處理返回多條記錄的查詢而且通過消除反復地分析代碼光標提高了代碼的處理速度


From:http://tw.wingwit.com/Article/program/Oracle/201311/18455.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.