【问题标题】:How to insert multiple insert sql statement如何插入多个insert sql语句
【发布时间】: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),没有唯一约束,然后按名称分组,看看哪个名称重复

标签: sql oracle


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多