Oracle 10g資料庫管理 應用與開發 二十

2021-08-31 10:13:56 字數 3293 閱讀 8945

23.2.7游標變數

游標變數也可以處理多行查詢結果集。游標變數的定義包括兩個步驟: (1

)定義cursor

型別的指標

語法:type ref_cursor_name is ref cursor[return return_type]

舉例:type var_cursor_name is ref cursor; (2

)定義ref cursor

型別的變數

v_rc  var_cursor_name;

綜合寫法如下:

type var_cursor_name is ref cursor;

v_rc  var_cursor_name;

上面的綜合宣告的游標變數稱為弱ref cursor

型別,因為它沒有指明游標返回的結果,因此它可以指向任何乙個具有多列的select

查詢結果。相對於上面還有一種稱為強ref cursor

型別。

宣告方式如下:

type varcursorname is ref cursor return emp%rowtype; //

指明了返回的結果

vcn varcursorname; //

宣告乙個強的ref cursor

型別的變數

使用游標變數與游標使用方式一樣,也需要宣告,開啟,檢索,關閉游標變數。

23.2.8綜合案例

sql> declare

2 3 type emp_cname is ref cursor return emp%rowtype; //宣告游標變數第一步

4 5 ecname emp_cname; //宣告游標變數第二步

6 7 emp_row emp%rowtype; //宣告用於儲存檢索資料的變數

8 9 begin

10 dbms_output.put_line('開始');

11 open ecname for select * from emp where empno=7934; //開啟游標變數

12 loop

13 fetch ecname into emp_row; //查詢結果賦值給儲存的變數

14 exit when ecname%notfound; //退出條件

15 dbms_output.put_line(emp_row.ename); //輸出結果

16 end loop; //退出迴圈

17 close ecname; //關閉游標變數

18 dbms_output.put_line('結束');

19 end;

20 /

開始miller

結束

//複雜的案例(游標的迴圈遍歷)

sql> declare

2 3 type emp_cname is ref cursor return emp%rowtype;

4 5 ecname emp_cname;

6 7 emp_row emp%rowtype;

8 9 begin

10 dbms_output.put_line('開始');

11 open ecname for select * from emp;

12 loop

13 fetch ecname into emp_row;

14 exit when ecname%notfound;

15 dbms_output.put_line(emp_row.ename);

16 end loop;

17 close ecname;

18 dbms_output.put_line('結束');

19 end;

20 /

開始smith

allen

ward

jones

martin

blake

clark

scott

king

turner

adams

james

ford

miller

結束

23.29

使用游標更新資料庫

定位游標之後就可以進行刪除(

修改)指定的資料行。更新的時候需要使用for update

選項,語法如下:

cursor cursor_name is select_statement;

for update[of column[,column],[nowait]]

of用來指定要鎖定的列,如果忽略of

那麼表中選擇的資料行都將鎖定。如果被鎖定行已經被鎖定了,那麼必須等待釋放才能鎖定對於這種情況我們可以使用nowait

語句。

當使用for update

語句宣告游標後,

可以再delete|update

語句中使用where current of

子句,修改|

刪除游標結果集中當前行對應的表中的資料。

語法如下:

where

舉例說明:

sql> declare

2 3 cursor ecname is select * from emp where empno=7934

4 for update of sal nowait;

5 6 esal number(7,2);

7 8

9 begin

10 dbms_output.put_line('開始');

11

12 for r in ecname loop

13 esal:=r.sal*10;

14 update emp set sal=esal where current of ecname;

15 end loop;

16

17 dbms_output.put_line('結束');

18 end;

19 /

開始結束

Oracle 10g資料庫管理

oracle 10g資料庫管理 課程介紹 本課程面向企業 oracle 10g 資料庫管理的學員。通過 oracle 10g 資料庫管理課程的系統培訓,使學員能夠在較短的時間內掌握 oralcle10g 資料庫管理和維護的各種技術,從而掌握最新版 oracle 的新特性和 oracle 資料通用技術...

Oracle 10g資料庫管理 應用與開發 五

3 日期時間函式,oracle 中的日期型資料實際含有兩個值 日期和時間。預設的日期格式是dd mon rr.日期時間函式用來返回當前系統的日期和時間 以及對日期和時間型別的資料進行處理運算。add months date,count 在指定的日期上增加count個月 last day date 返...

Oracle 10g資料庫管理 應用與開發 八

十 六 修改sql資料 dml data manipulation language 執行資料操作任務的語言,dml也是pl sql語言的重要組成部分。常用的dml語言包括insert update delete語句,它們分別完成了對資料庫的新增 修改和刪除等操作。1 新增資料 1.1簡單的inse...