ORACLE 游標和游標變數的區別

2021-06-17 16:13:53 字數 890 閱讀 3729

如何定義游標型別

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 列,列.為游標中的...