資料庫物件 游標型變數

2021-04-27 10:33:15 字數 2548 閱讀 2645

定義 ref cursor 型別 , 建立游標變數有兩個步驟 :

1) 定義 ref cursor 型別

語法格式 :

type ref_type_name is ref cursor [return return_type]

說明 :

ref_type_name 是游標變數中使用的型別 ;return_type 必須是乙個記錄 (record) 或者資料庫表中的一行 .(rowtype)

下面定義 乙個 ref cursor 型別游標

delare type xs_cur is ref cursor return xs%rowtype;

注意 :

ref cursor 型別既可以是強型別 , 也可以是弱型別 , 區別是強型別有返回型別 , 弱型別沒有 . 如下所示

declare

type xs_cur is ref cursor return xs%rowtype;-- 強型別

type mycur is ref cursor;-- 弱型別

2) 宣告這種型別的游標變數 : 一旦定義了 ref cursor 型別就可以在 pl/sql 塊或子程式中宣告這個游標變數 . 如 :

decare

type xs_cur ref cursor return xs%rowtype;

xscur xs_cur;

當然 , 在 return 子句中也可以定義自定義的 record 型別 , 如 :

declare

type kc_cj is record

kch number (4),

kcm number(10),

cj  number(4,2)

type kc_cjcur is ref cursor return kc_cj;

此外 , 也可以宣告游標變數作為函式和過程的引數 . 例如 :

declare

type xs_cur is ref cursor return xs%rowtype;

procedure open_xs (xscur in out xs_cur)is

3. 控制游標變數

使用游標變數時 , 要遵循以下步驟 :open-fetch-close

open 語句與多行查詢的游標變數相關聯 , 它執行查詢 , 標誌結果集

語法格式 :

open for

select_statement|dynamic_string[using bind_argument[,......]]

如 :

if not xscur%isopen then

open xscur for select * from xs;

end if ;

游標變數同樣可以使用游標屬性 :%found,%isopen,%rowtype

在使用過程中 , 其他的 open 語句可以為不同的查詢開啟相同的游標變數 . 因此 , 在重新開啟之前 , 不要關閉游標變數 . 可以開啟游標 , 並作為引數傳遞給儲存過程 . 如 :

create package xs_data as

type xs_cur is ref cursor return xs%rowtype;

rrocedure open_xs(xscur in out xs_cur);

end xs_data;

create package body xs_data as

procedure open_xs(xscur in out xs_cur)

as begin

open xscur for select * from xs;

end open_xs;

end xs_data;

當宣告乙個游標變數作為開啟游標變數子程式的引數時 , 必須定義 in out 模式 . 也就是說 , 子程式可以將乙個開啟的游標變數傳遞給呼叫者 .

給你乙個完整的例子:  

declare  

type   empcurtyp   is   ref   cursor;  

emp_cv       empcurtyp;  

emp_rec     emp%rowtype;  

sql_stmt   varchar2(200);  

my_job       varchar2(15)   :=   'clerk';  

begin  

sql_stmt   :=   'select   *   from   emp   where   job   =   :j';  

open   emp_cv   for   sql_stmt   using   my_job;  

loop  

fetch   emp_cv   into   emp_rec;  

exit   when   emp_cv%notfound;  

--   process   record  

end   loop;  

close   emp_cv;  

end;  

Python 資料庫游標物件詳解

pymssql,用於python連線sql server的包 之前差各種pymssql的引數網上說的都不詳細,這裡是我找到的一部分,然後貼上官網 英語好的可以直接看。db api規範的屬性 apilevel db api 模組相容的 db api 版本號 threadsafety 執行緒安全級別 p...

資料庫優化 表變數替換游標

如何迴圈對資料表中的資料按行處理,大家很快會想到游標,不錯,游標確實能實現這個功能,學校中教科書也介紹了這個方法。但對於效率,這個方法就不是最好的了。因為游標本身有缺點 游標是存放在記憶體中,很費記憶體。游標一建立,就將相關的記錄鎖住,直到取消游標。游標提供了對特定集合中逐行掃瞄的手段,一般使用游標...

資料庫游標

資料庫之 游標 轉貼 在資料庫開發過程中,當你檢索的資料只是一條記錄時,你所編寫的事務語句 往往使用select insert 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。1.游標和游標的優點 在資料庫中,游標...