如何插入多个insert sql语句

Posted

技术标签:

【中文标题】如何插入多个insert sql语句【英文标题】:How to insert multiple insert sql statement 【发布时间】:2019-01-24 06:53:05 【问题描述】:

有一个表 Person(id, name)。我在人员表中插入了 1000 多条记录。 id 和 name 都应该是唯一的。我写了这样的东西

INSERT ALL 
       INTO PERSON (1, 'MAYUR')
       INTO PERSON (2, 'SALUNKE') 
       .....(1000 records)
SELECT * FROM DUAL;    

我在此查询中获得名称的唯一约束。我怎么知道哪条记录特别失败。我在日志中看到的只有这个

从第 3 行开始的错误命令 - ORA-00001: 唯一约束 (UN_PERSON_NAME) 违规。

这并不能告诉确切的记录是重复的。

【问题讨论】:

与 insert all 然后选择 * 很混淆,如果你真的想知道哪一行有问题,最好将它们分成单独的一行。 首先,插入临时表(temp_person),没有唯一约束,然后按名称分组,看看哪个名称重复 【参考方案1】:

您缺少values 关键字。试试这个!

INSERT ALL 
       INTO PERSON values(1, 'MAYUR')
       INTO PERSON values(2, 'SALUNKE') 
       .....(1000 records)
SELECT * FROM DUAL;    

【讨论】:

【参考方案2】:
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1

【讨论】:

虽然这个答案可能有用,但建议对问题是什么以及如何解决问题给出适当的解释 如果你想将数据从一个表插入到另一个表只需使用这个查询插入数据。但是你在 select 和 insert 语句中的列长度相同【参考方案3】:

不幸的是,Oracle 不支持使用单个 VALUES() 语句进行多次插入。我通常这样处理:

INSERT PERSON (id, name)
    SELECT 1, 'MAYUR' FROM DUAL UNION ALL
    SELECT 2, 'SALUNKE' FROM DUAL UNION ALL 
       .....;

这种方法的一个优点是您可以使用子查询并分配 id:

INSERT PERSON (id, name)
    SELECT rownum, x.name
    FROM (SELECT 'MAYUR' FROM DUAL UNION ALL
          SELECT 'SALUNKE' FROM DUAL UNION ALL 
          .....
         ) x

【讨论】:

以上是关于如何插入多个insert sql语句的主要内容,如果未能解决你的问题,请参考以下文章

使用T-SQL语句操作数据表-插入数据

SQL的INSERT怎么可以一次插入多项数据?

如何得到JDBC Insert 语句执行后插入Oracle 数据库记录的主键

如何通过sql的insert语句插入大量字符串到oracle的clob字段?

求一条插入并返回的SQL语句

java 中如何使用sql插入语句