1. 程式人生 > >Oracle PL/SQL顯示遊標、隱式遊標、遊標迴圈

Oracle PL/SQL顯示遊標、隱式遊標、遊標迴圈

dba基礎課程:Oracle PL/SQL顯示遊標、隱式遊標、遊標迴圈

顯示遊標

使用遊標順序

1.宣告遊標

2.開啟遊標

3.讀取遊標

4.資料是否為空,是關閉遊標,否繼續讀取

1.宣告遊標

cursor cur_name[(input_parameter1,input_parameter2...)]

[return ret_type]

is select_sentence;

input_parameter:para_name [in] datatype [{:= default|para_value}]

例子

cursor cur_orderinfo(ordercode in varchar2 := '0000000')

is select * from orderinfo where ordercode= ordercode;

這裡的引數不可以指定長度,否則會報錯

2.開啟遊標

open cur_name[(para_value[,para_value2]...)];

para_value:指定輸入引數的值

open cur_orderinfo('11111111');

param_value是可選引數,如果未指定則用宣告使用的預設值,如果指定了則用這裡指定的值

3.讀取遊標

fetch cur_name into {variable};

例子:

var_orderinfo orderinfo%rowtype;

fetch cur_order into var_orderinfo;

如果有值的話,可以用var_orderinfo.orderid讀取資料

4.關閉遊標

close cur_name;

例子:

close cur_orderinfo;

遊標的屬性

1.%found 布林型屬性 ,如果SQL語句至少影響到一行資料,則該屬性返回御前,否則返回false

2.%notfound 與%found屬性相反

3.%rowcount 數字型屬性,返回受SQL語句影響的行數

4.%isopen 布林型屬性,遊標開啟返回true,關閉返回false

例子:

set serveroutput on

declare

cursor cur_orderinfo (username in varchar2)

is select * from orderinfo where username= username;

var_orderinfo orderinfo%rowtype;

begin

open cur_orderinfo('abcd');

fetch cur_orderinfo into var_orderinfo;

while cur_orderinfo%found loop

dbms_output.put_line('訂單編號:' || var_orderinfo.ordercode);

fetch cur_orderinfo into var_orderinfo;

end loop;

close cur_orderinfo;

exception

when others then

dbms_output.put_line('錯誤');

end;

隱式遊標

在執行一個SQL語句時,Oracle會自動建立一個隱式遊標。這個遊標是記憶體中處理該語句的工作區域,隱式遊標主要是處理資料操縱語句(如update,

delete語句)的執行結果,當然特殊情況下,也可以處理select語句的查詢結果。由於隱式遊標也有屬性,當使用隱式遊標屬性時,需要在屬性前面加上隱式

遊標的預設名稱--SQL。在實際程式設計中,經常使用隱式遊標來判斷更新資料行或刪除資料行的情況。

set serveroutput on

begin

update orderinfo set mobilephone = '1111111111' where username = 'abcd';

if sql%notfound then

dbms_output.put_line('此使用者不需要更新手機號碼');

else

dbms_output.put_line('更新手機成功');

end if;

end;

通過for語句循環遊標

1.for語句迴圈隱式遊標

begin

for var_orderinfo in (select * from orderinfo)

loop

sql_sentences;

end loop;

end;

2.for語句迴圈顯示遊標

declare

cursor cur_orderinfo is select * from orderinfo;

begin

for var_orderinfo in cur_orderinfo

loop

sql_sentences;

end loop;

end;

for語句循環遊標時,可以宣告遊標,但不用開啟,讀取,關閉遊標。