動態游標可以遍歷動態的表,
格式:
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...