从TOAD执行插入脚本

时间:2016-11-22 07:14:07

标签: oracle insert toad

我使用了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);

所以,这需要很长时间,因为行太多了。

有办法吗?

谢谢!

2 个答案:

答案 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行时,我确实遇到了内存问题。我把它分成多个开始/提交/结束块并重新运行,一切正常。