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認證