我使用了TOAD,Oracle 11g。
我想创建批量插入脚本。
实施例
load data inpath '/tmp/DataDirectory/*' overwrite into table tableName;
但是,当我使用导出数据集 - 插入语句时,我得到:
INSERT INTO tbl_name (a,b,c)
VALUES(1,2,3),(4,5,6),(7,8,9);
所以,这需要很长时间,因为行太多了。
有办法吗?
谢谢!
答案 0 :(得分:1)
不幸的是,Oracle不支持使用values子句插入mutlitple行,如
INSERT INTO tbl_name (a,b,c) VALUES (1,2,3),(4,5,6),(7,8,9);
您必须将其转换为Oracle的插入选择:
INSERT INTO tbl_name (a,b,c)
SELECT 1,2,3 FROM DUAL
UNION ALL
SELECT 4,5,6 FROM DUAL
UNION ALL
SELECT 7,8,9 FROM DUAL;
或者编写单独的插入语句,就像你自己已经展示过一样。
答案 1 :(得分:0)
我有一个每日审核,我必须从几行更新到几千。我将代码用'Begin / commit / end'包围,它只需几秒钟即可执行,而不是一次运行一次更新所需的时间。
begin
update my_audit set audit_date = sysdate, audit_by = trim(q'{DBA for DLD}'), audit_comments = trim(q'{ RFC-009999 Fix blah blah blah for 1000 entries }') , audit_complete = 'Y' where row_id = 4754973;
... 998 update statements here ...
update my_audit set audit_date = sysdate, audit_by = trim(q'{DBA for DLD}'), audit_comments = trim(q'{ RFC-009999 Fix blah blah blah for 1000 entries }') , audit_complete = 'Y' where row_id = 4755973;
commit;
end;
当我尝试使用50,000行时,我确实遇到了内存问题。我把它分成多个开始/提交/结束块并重新运行,一切正常。