2016-11-22 96 views
-1

我使用了TOAD,Oracle 11g。从TOAD执行插入脚本

我想创建批量插入脚本。

INSERT INTO tbl_name (a,b,c) 
VALUES(1,2,3),(4,5,6),(7,8,9); 

但是,当我使用的出口数据集 - insert语句,我得到:

Insert into tbl_name (1, 2, 3) 
    Values (1, 2, 3); 

Insert into tbl_name (1, 2, 3) 
Values (1, 2, 3); 

因此,它需要很长的时间,因为有太多的行。

有没有办法?

谢谢!

+1

Oracle不支持多行插入语句。你可以做的唯一方法是使用多个插入。您的第一条语句的语法不适用于Oracle。 –

+0

啊...好的。谢谢! – BaeDa

回答

1

不幸的是Oracle不支持插入的价值观条款mutlitple排在

INSERT INTO tbl_name (a,b,c) VALUES (1,2,3),(4,5,6),(7,8,9); 

你必须将其转换成一个插入选择甲骨文:

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; 

或写单独的插入语句就像你已经显示的那样。

0

我有一个每日审计,我必须从几行更新到几千。我用'开始/提交/结束'来包围代码,并且它在几秒钟内执行而不是一次运行更新所需的分钟数。

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行做到这一点我也遇到了内存不足的问题。我把它分解成多个begin/commit/end块并重新运行,并且一切正常。