Oracle中的INSERT ALL语句无法插入

时间:2015-05-07 06:21:49

标签: oracle

我要在表格中插入多行。 表中有一些约束因为少数行而失败。 但是使用INSERT ALL语句时,当它发现第一个带有约束的插入失败时,它会停止插入到oracle db,并且还没有插入其他正确的数据。 它会以这种方式工作吗?或者我们有任何插入所有有效数据的方法,并忽略INSERT ALL中的其他插入。

1 个答案:

答案 0 :(得分:2)

  

当它发现带有约束的第一个插入失败时,它会停止插入到oracle db,并且还没有插入其他正确的数据。它会以这种方式工作吗。

是的,它旨在以这种方式工作。如果任何一行错误, INSERT ALL 语句将无法插入

例如,

SQL> CREATE TABLE t(a NUMBER);

Table created.

SQL> ALTER TABLE t ADD CONSTRAINT t_unique UNIQUE(a);

Table altered.

SQL> INSERT INTO t(a) VALUES(1);

1 row created.

SQL> INSERT ALL
  2    INTO t (a) VALUES (1)
  3    INTO t (a) VALUES (2)
  4    INTO t (a) VALUES (3)
  5  SELECT * FROM dual;
INSERT ALL
*
ERROR at line 1:
ORA-00001: unique constraint (LALIT.T_UNIQUE) violated    

SQL> SELECT * FROM t;

         A
----------
         1

如果要插入其他值正确的值,则将它们作为单独的insert语句放置,并将所有insert语句作为脚本执行。

例如,

SQL> CREATE TABLE t(a NUMBER);

Table created.

SQL> ALTER TABLE t ADD CONSTRAINT t_unique UNIQUE(a);

Table altered.

SQL> INSERT INTO t(A) VALUES(1);

1 row created.

SQL> INSERT INTO t(a) VALUES(1);
INSERT INTO t(a) VALUES(1)
*
ERROR at line 1:
ORA-00001: unique constraint (LALIT.T_UNIQUE) violated    

SQL> INSERT INTO t(A) VALUES(2);

1 row created.

SQL> INSERT INTO t(A) VALUES(3);

1 row created.

SQL> SELECT * FROM t;

         A
----------
         1
         2
         3