如何定義游標型別
type ref_type_name is ref cursor [return return_type];
宣告游標變數
cursor_name ref_type_name;
從技術底層看,兩者是相同的。普通plsql cursor在定義時是「靜態」的。而ref cursors可以動態開啟。
例如下面例子:
declare
type rc is ref cursor;
cursor c is select * from dual;
l_cursor rc;
begin
if ( to_char(sysdate,'dd') = 30 ) then
open l_cursor for 'select * from emp';
elsif ( to_char(sysdate,'dd') = 29 ) then
open l_cursor for select * from dept;
else
open l_cursor for select * from dual;
end if;
open c;
end;
/l rc根據邏輯動態開啟;而游標c定義好了只有就無法修改了。
l ref cursor可以返回給客戶端,cursor則不行。
l cursor可以是全域性的global ,ref cursor則必須定義在過程或函式中。
l ref cursor可以在子程式間傳遞,cursor則不行。
l cursor中定義的靜態sql比ref cursor效率高,所以ref cursor通常用在向客戶端返回結果集。
Oracle游標和游標變數的區別
oracle游標我們經常用到,下面介紹oracle游標和游標變數的區別。oracle游標是資料庫中乙個命名的工作區,當游標被宣告後,他就與乙個固定的sql想關聯,在編譯時刻是已知的,是靜態的,它永遠指向乙個相同的查詢工作區。游標變數可以在執行時刻與不同的sql語句關聯,在執行時可以取不同的sql語句...
簡述Oracle游標變數
游標變數和顯示游標的用法基本相同。游標變數的不同之處在於可以在不同程式之間作為引數進行傳遞。宣告游標變數 游標變數型別分為強型別和弱型別兩種,如下所示 type cursortypename is ref cursor return returntype 強型別 type cursortypenam...
游標資料修改和游標變數
修改游標資料 如果建立的游標需要執行更新或者刪除必須帶有for update子句,for update子句會將游標提取出來的資料進行行級鎖定,這樣在本會話更新期間,其他使用者的會話就不能對當前游標中的資料進行更新操作,for update有如下兩種形式 for update of 列,列.為游標中的...