oracle游標的使用

2022-05-02 13:36:10 字數 3451 閱讀 4724

隱式游標:select ordid into lordid 這種單行操作,一次只能從資料庫中提取一行資料時,系統都會使用乙個隱式游標。

用法舉例:

create

orreplace

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;

返回:

游標所影響的行數:2

found為真

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 游標名; 

顯式游標開啟後,必須顯式地關閉。游標一旦關閉,游標占用的資源就被釋放,游標變成無效,必須重新開啟才能使用。 

舉例:

1

create

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的游標是一種臨時資料庫物件,可以臨時存放資料表中的資料行副本,也可以指向儲存在資料表中...