定義 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.游標和游標的優點 在資料庫中,游標...