有没有办法在一个EXECUTE IMMEDIATE
中插入多行?而不是为每个插入编写EXECUTE IMMEDIATE
...
答案 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)
当然,你可以去批量插入...