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語句循環游標時,可以聲明游標,但不用打開,讀取,關閉游標。

 

來源:Oracle認證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM