plsql使用一个execute immediate命令插入多行

时间:2011-02-28 22:25:58

标签: sql oracle plsql insert bulkinsert

有没有办法在一个EXECUTE IMMEDIATE中插入多行?而不是为每个插入编写EXECUTE IMMEDIATE ...

5 个答案:

答案 0 :(得分:7)

很难说出你要插入什么。你可以使用EXECUTE IMMEDIATE来轻松地执行INSERT ... SELECT,但我怀疑这不是你所追求的,而且你可能并不只是想在EXECUTE IMMEDIATE周围循环。

如果多表插入不是您想要的,您可以在PL / SQL块和/或FORALL中使用EXECUTE IMMEDIATE

create table test_forall_dyn (val varchar2(1));

declare
  type tab_char is table of varchar2(1) index by binary_integer;
  t_char tab_char;
begin
  for i in 1..26 loop
    t_char(i) := chr(64 + i);
  end loop;
  forall i in 1..26
    execute immediate 
      'begin 
         insert into test_forall_dyn (val) values(:1);  
         insert into test_forall_dyn (val) values(:1); 
       end;' 
       using t_char(i);
end;
/

select count(*) from test_forall_dyn;

答案 1 :(得分:1)

EXECUTE IMMEDIATE
INSERT INTO table (col1, col2, col3) (
            SELECT 1 AS col1, 2 AS col2, 3 AS col3 FROM dual
  UNION ALL SELECT 4,         5,         6         FROM dual
  UNION ALL SELECT 7,         8,         9         FROM dual ) ;

答案 2 :(得分:0)

玛丽亚, 为什么首先使用动态sql? 大多数时候使用动态sql并没有完全改进可伸缩性。 同样是为了可读性。 调试更难.... 在许多情况下,还有一些奇怪的安全问题...... 我不知道你为什么使用动态sql,但如果这是生产应用程序的一部分,我会重新考虑使用它。

罗纳德。

答案 3 :(得分:0)

@maria 第一帧选择问题,给你多行,你将插入... 你选择stament shoud按照你想要插入表格中的数据的顺序给出数据

然后使用..

插入Tabl1(col1,col2,col3)(从tabl2中选择名称,地址,电话) 提交;

答案 4 :(得分:0)

当然,你可以去批量插入...