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