forall oracle 游标,forall 里执行动态sql的问题

表名动态,后面全要拼凑,因为那个集合是非sql类型的集合,无法拼凑的,用||是不行的,用using当然也不行,using必须要求sql类型

--方法,动态PLSQL

SQL> select * from t;

VER         ID

---------- ----------

1          1

12          2

1          1

12          2

SQL>

SQL> --动态plsql解决,因为拼凑的是动态sql

SQL> declare

2      v_sql varchar2(4000);

3      v_tablename varchar2(100):='t';

4  begin

5    v_sql:='

6    declare

7      type r_outtab is record (ver NUMBER(5,0),id NUMBER(5,0));

8      type t_outtab is table of r_outtab index by binary_integer;

9      v_outtab t_outtab;

10      v_query varchar2(30000);

11      begin

12       v_query :=''select VER,TYPE from tt where rownum<10 '' ;

13      execute immediate v_query  bulk collect into  v_outtab;

14       forall i in v_outtab.first .. v_outtab.last

15      insert into  '||v_tablename||'  values v_outtab(i) ;

16     end;';

17       dbms_output.put_line(v_sql);

18      execute immediate v_sql;

19      commit;

20  end;

21  /

PL/SQL procedure successfully completed

SQL> select * from t;

VER         ID

---------- ----------

1          1

12          2

1          1

12          2

1          1

12          2

6 rows selected

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值