隱式游標:select ordid into lordid 這種單行操作,一次只能從資料庫中提取一行資料時,系統都會使用乙個隱式游標。
用法舉例:
createorreplace
function
zf_test
return
varchar
iserror
varchar(100
); lempname
varchar(10
); pragma autonomous_transaction;
begin
update tablename e set e.empname =
'hahh
'where e.empid like
'888888%';
dbms_output.put_line(
'游標所影響的行數:
'||sql%
rowcount
);if sql%notfound then
dbms_output.put_line(
'notfound為真');
dbms_output.put_line(
'noffound為假
');
endif
;
if sql%found then
dbms_output.put_line(
'found為真');
else
dbms_output.put_line(
'found為假');
endif
;
if sql%isopen then
dbms_output.put_line(
'isopen為真');
else
dbms_output.put_line(
'isopen為假');
endif
;commit
;return('ok'
);exception
when others then
begin
error :='
異常**:
'|| sqlcode ||
'詳細:'||
sqlerrm;
return
(error);
end;end zf_test;
返回:
游標所影響的行數:2found為真
isopen為假
顯式游標:如果要提取多行資料,就要由程式設計師定義乙個顯式游標,並通過與游標有關的語句進行處理。顯式游標對應乙個返回結果為多行多列的select語句。
游標的使用分成以下4個步驟:
1.宣告游標
在declear部分按以下格式宣告游標:
cursor 游標名[(引數1 資料型別[,引數2 資料型別...])]
is select語句;
引數是可選部分,所定義的引數可以出現在select語句的where子句中。如果定義了引數,則必須在開啟游標時傳遞相應的實際引數。
select語句是對錶或檢視的查詢語句,甚至也可以是聯合查詢。可以帶where條件、order by或group by等子句,但不能使用into子句。在select語句中可以使用在定義游標之前定義的變數。
2.開啟游標
在可執行部分,按以下格式開啟游標:
open 游標名[(實際引數1[,實際引數2...])];
開啟游標時,select語句的查詢結果就被傳送到了游標工作區。
3.提取資料
在可執行部分,按以下格式將游標工作區中的資料取到變數中。提取操作必須在開啟游標之後進行。
fetch 游標名 into 變數名1[,變數名2...];
或 fetch 游標名 into 記錄變數;
游標開啟後有乙個指標指向資料區,fetch語句一次返回指標所指的一行資料,要返回多行需重複執行,可以使用迴圈語句來實現。控制迴圈可以通過判斷游標的屬性來進行。
下面對這兩種格式進行說明:
第一種格式中的變數名是用來從游標中接收資料的變數,需要事先定義。變數的個數和型別應與select語句中的字段變數的個數和型別一致。
第二種格式一次將一行資料取到記錄變數中,需要使用%rowtype事先定義記錄變數,這種形式使用起來比較方便,不必分別定義和使用多個變數。
定義記錄變數的方法如下:
變數名 表名|游標名%rowtype;
其中的表必須存在,游標名也必須先定義。
4.關閉游標
close 游標名;
顯式游標開啟後,必須顯式地關閉。游標一旦關閉,游標占用的資源就被釋放,游標變成無效,必須重新開啟才能使用。
舉例:
1create
orreplace
function
zf_test
2return
varchar
is3 error varchar(100
);4 lempname varchar(10
);5 lemptype varchar(50
);6 t2 varchar(4000);7
cursor
temp
isselect empname,emptypeid from dict_employee where empid like
'666666%';
89pragma autonomous_transaction;
10begin
1112
open
temp;13
loop
14fetch
temp
into
lempname,lemptype;
15exit
when
temp
%notfound;
16 t2 := t2||lempname ||
lemptype;
17end
loop;
18return
(t2);
1920
21exception
22when others then
23begin
24 error :=
'異常**:
'|| sqlcode ||
'詳細:'||
sqlerrm;
25return
(error);
26end;27
end zf_test;
總結: 與游標相比,我覺得還是直接寫for迴圈好用,利用for迴圈加上隱式游標處理迴圈處理單行資料,**還要簡單點
oracle游標的使用
當select語句從資料庫中返回的記錄多餘一條時,就可以使用游標 cursor 游標可以理解為一次訪問乙個的一組記錄。select語句將列提取到游標中,然後根據游標取得記錄。使用游標時需要遵從以下的5個步驟 1 宣告一些變數,用於儲存select語句返回列值 2 宣告游標,並制定select語句 3...
oracle游標的使用
游標 cursor 也稱之為游標,從字面意思理解就是游動的游標。游標是對映在結果集中一行資料上的位置實體。游標是從表中檢索出 結果集,並從中每次指向一條記錄進行互動的機制。cursor 游標名 引數名 資料型別 引數名 資料型別 is select 語句 示例 無參游標 cursor c emp i...
ORACLE游標的使用
1 游標的說明 游標是一種向包含多條資料記錄的結果集中每次讀取一行的機制,逐行處理查詢結果,以程式設計的方式訪問資料庫。可以把游標當成指標,可以指定結果集中的任何位置,然後允許使用者對指定位置的資料進行操作。sql的游標是一種臨時資料庫物件,可以臨時存放資料表中的資料行副本,也可以指向儲存在資料表中...