国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:06:27
字體:
來源:轉載
供稿:網友
pl/sql光標為程序提供了從數據庫中選擇多行數據,然后對每行數據單獨進行處理的方法,它為oracle提供了一種指示和控制sql處理的各個階段的方法。我將認為您已經對pl/sql有一定的了解。通過本文,您將學會:
光標的創建 光標的處理 定義和使用光標屬性 一、 什么是光標
oracle使用兩種光標:顯式光標和隱式光標。不管語句返回多少條紀錄,pl/sql為使用的每一條update、delete和insert等sql命令隱式的聲明一個光標。(要管理sql語句的處理,必須隱式的給它定義一個光標。)用戶聲明并使用顯示光標處理select語句返回的多條記錄。顯示的定義光標一種結構,它使用戶能夠為特定的語句指定內存區域,以便以后使用。

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

三、 使用顯示光標的基本方法
步驟如下:
聲明光標 打開光標 從光標中取回數據 關閉光標 1、聲明光標
聲明光標的語法如下:
declare cursor_name
is
select statement
其中,cursor_name是您給光標指定的名稱;select statement是給光標活動集返回記錄的查詢。
聲明光標完成了下面兩個目的:
給光標命名;
將一個查詢與光標關聯起來。
值得注意的是,必須在pl/sql塊的聲明部分聲明光標;給光標指定的名稱是一個未聲明的標識符,而不是一個pl/sql變量,不能給光標名稱賦值,也不能將它用在表達式中。pl/sql塊使用這個名稱來引用光標查詢。
例:declare
cursor c1
is
select view_name from all_views
where rownum<=10;
另外還可以在光標定義語句中聲明光標的參數,例:
cursor c1(view _nbr number)
is
select view_name from all_views
where rownum<= view _nbr;
光標參數只對相應的光標是可見的,不能在光標范圍之外引用該光標的參數。如果試圖這樣做,oracle將返回一個錯誤,指出該變量沒有定義。
2、打開光標
打開光標的語法如下:
open cursor_name;
其中cursor_name是您以前定義的光標名稱。
打開光標將激活查詢并識別活動集,可是在執行光標取回命令之前,并沒有真正取回記錄。open命令還初始化了光標指針,使其指向活動集的第一條記錄。光標被打開后,直到關閉之前,取回到活動集的所有數據都是靜態的,換句話說,光標忽略所有在光標打開之后,對數據執行的sql dml命令(insert、update、delete和select)。因此只有在需要時才打開它,要刷新活動集,只需關閉并重新打開光標即可。
3、從光標中取回數據
fetch命令以每次一條記錄的方式取回活動集中的記錄。通常將fetch命令和某種迭代處理結合起來使用,在迭代處理中,fetch命令每執行一次,光標前進到活動集的下一條記錄。
fetch命令的語法:
fetch cursor_name into record_list;
其中,cursor_name是前面定義的光標的名稱;record_list是變量列表,它接受活動集中的列。fetch命令將活動集的結果放置到這些變量中。
執行fetch命令后,活動集中的結果被取回到pl/sql變量中,以便在pl/sql塊中使用。每取回一條記錄,光標的指針就移向活動集的下一條記錄。
例:
fetch c1 into vname;
while c1%found loop
dbms_output.put_line(to_char(c1%rowcount)||' '||vname);
end loop;
其中,使用屬性'%found'使得當fetch到達活動集的結尾時,不會引發異常。其它屬性及含義見下表:
屬性 含量
%found 布爾型屬性,當最近一次該記錄時成功返回,則值為true
%notfound 布爾型屬性,它的值總與%found屬性的值相反
%isopen 布爾型屬性,當光標是打開時返回true
%rowcount 數字型屬性,返回已從光標中讀取的記錄數

屬性含量%found布爾型屬性,當最近一次該記錄時成功返回,則值為true%notfound布爾型屬性,它的值總與%found屬性的值相反%isopen布爾型屬性,當光標是打開時返回true%rowcount數字型屬性,返回已從光標中讀取的記錄數
4、關閉光標
close語句關閉以前打開的光標,使得活動集不確定。當用戶的程序或會話結束時,oracle隱式關閉光標。光標被關閉后,就不能對它執行任何操作了,否則將引發異常。
close語句的語法是:
close cursor_name;
其中,cursor_name是以前打開的光標的名稱。
完整的程序代碼如下:
declare
cursor c1 is select view_name from all_views
where rownum<=10
order by view_name;
vname varchar2(40);
begin
open c1;
fetch c1 into vname;
while c1%found loop
dbms_output.put_line(to_char(c1%rowcount)||''||vname);
end loop;
end;
……close c1;

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 顺平县| 鹤山市| 嫩江县| 阳泉市| 绥芬河市| 抚远县| 柳州市| 江孜县| 承德县| 瓦房店市| 肥城市| 四平市| 宝山区| 宁蒗| 宾川县| 珠海市| 乌兰浩特市| 德安县| 平乡县| 深圳市| 威信县| 临江市| 靖西县| 宁陕县| 岳阳县| 阿勒泰市| 沭阳县| 淅川县| 买车| 天津市| 康乐县| 平凉市| 昌吉市| 东乡族自治县| 临潭县| 响水县| 云浮市| 图木舒克市| 五家渠市| 屯门区| 荥经县|