INSERT ALL
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
.......
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
SELECT * FROM DUAL;
我使用此语句将多行插入表中。
有时我插入正确,即使我给它几千行。我甚至用它插入了10100行!
但有时,它说这个
ORA-24335: cannot support more than 1000 columns
有什么想法吗?
答案 0 :(得分:4)
是的,有一个限制:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9014.htm
多种插入内容的限制
多种插入物受以下限制:
...
- 在多表插入中,所有 insert_into_clause 都无法组合以指定超过999个目标列。
...
您可以在单个表中插入,因此可以在没有多表插入的情况下完成。例如,使用UNION ALL:
insert into t (col1, col2, col3)
select 'val1_1', 'val1_2', 'val1_3' from dual
union all
select 'val1_1', 'val1_2', 'val1_3' from dual
...
答案 1 :(得分:0)
我尝试使用一个insert all语句插入50.000行,但我的编辑器(oracle sql developer)无法处理它。我没有得到任何错误,但几秒钟后它没有回应。然后我尝试从500开始插入更少的行。接近5000行的一个插入所有语句,我的编辑器再次失败。我也没有看到任何文件限制。然后我尝试了另一种插入大量行的方法。我将整个50.000行语句拆分为1000行"插入所有"语句(使用小宏脚本)。所有插件都已成功完成,总执行时间合理。
与insert all语句相比,sql loader完全可以为插入太多行提供更好的结果。