Oracle動態游標實現動態SQL迴圈遍歷

2021-08-22 13:29:23 字數 1758 閱讀 7136

動態游標可以遍歷動態的表,

格式:

type 游標型別 is ref cursor;  --定義乙個動態游標

游標名  游標型別;

如果查詢的表的資料不同的,動態變化的,這時候可以用動態游標。

需要注意的是,動態游標的定義,

在普通儲存過程中:需要放在 is 後面的第一行

動態游標通過:open 游標 for 字串,形式使用,遍歷。

create or replace procedure p_test_sql 

is

type ref_cursor_type is ref cursor; --定義乙個動態游標

tablename varchar2(200) default 'ess_client';

v_sql varchar2(1000);

mobile varchar2(15);

usrs ref_cursor_type;

begin

--使用連線符拼接成一條完整sql

v_sql := 'select usrmsisdn from '||tablename||' where rownum < 11';

--開啟游標

open usrs for v_sql ;

loop

fetch usrs into mobile;

exit when usrs%notfound;

insert into tmp(usrmsisdn) values(mobile);

end loop;

close usrs;

commit;

end p_test_sql;

下面是乙個例項

create or replace procedure ddgz1--訂單跟蹤

(

p_flag varchar,--訂單型別

p_operate varchar,--操作型別

p_bh varchar --傳入的編號id)is

type ref_cursor_type is ref cursor;

v_cur_ckd ref_cursor_type;

begin

open v_cur_ckd for 'select v_erp,v_drp,v_jxsmc,v_jxs,v_dwmc,v_czr,v_jlsj from tmp_ddgz1';

fetch v_cur_ckd into v_erp,v_drp,v_jxsmc,v_jxs,v_dwmc,v_czr,v_jzsj;

while v_cur_ckd%found

loop

insert into drpddgzjl2 (jlid,drp,erp,jxs,jxsmc,jlsj,gzjl,czr,bhid) values(sys_guid(),v_drp,v_erp,v_jxs,v_jxsmc,v_jzsj,v_dwmc||'受託代銷成品庫接收訂單,組織發貨',v_czr,'出庫單'||p_bh);

fetch v_cur_ckd into v_erp,v_drp,v_jxsmc,v_jxs,v_dwmc,v_czr,v_jzsj;

end loop;

close v_cur_ckd;

end;

**

oracle動態游標

declare v col1 varchar2 254 v col2 varchar2 254 v sql varchar2 1024 type my cursor is ref cursor v cur my cursor begin v sql select 1,2 from dual wher...

oracle 動態游標

今天寫了個動態游標 使用傳入引數 關於游標分類以及用法 思路就是先拼好sql 然後開動態游標 oralce10g也支援正規表示式 呵呵 剛剛好可以實現動態傳入引數 procedure tj pda testdata v indicator in varchar is type rc is ref c...

利用oracle動態游標實現動態SQL迴圈遍歷

create or replace procedure p test sql is type ref cursor type is ref cursor 定義乙個動態游標 tablename varchar2 200 default ess client v sql varchar2 1000 mo...