Имам няколко реда за вмъкване в таблица. Има някои ограничения в таблицата, които се провалят за няколко от редовете. Но с инструкцията INSERT ALL, когато открие, че първото вмъкване с ограничение е неуспешно, спира вмъкването в Oracle db и останалите данни, които са правилни, също не се вмъкват. Дали ще работи само по този начин. Или имаме някакъв метод, в който вмъкваме всички валидни данни и игнорираме другите вмъквания в INSERT ALL.
Оператор INSERT ALL в Oracle не може да се вмъкне
comment
можете ли да публикувате запитването?
- person Mudassir Hasan   schedule 07.05.2015
comment
Както вече спомена @mmhasannn - моля, публикувайте израза DDL за всички таблици, в които се опитвате да INSERT, както и вашия оператор INSERT.
- person Frank Schmitt   schedule 07.05.2015
Отговори (1)
когато установи, че първото вмъкване с ограничение е неуспешно, спира вмъкването в 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
Ако искате да бъдат вмъкнати други стойности, които са правилни, тогава ги поставете като отделни изрази за вмъкване и изпълнете всички изрази за вмъкване като скрипт.
Например,
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
person
Lalit Kumar B
schedule
07.05.2015
Благодаря ви, в момента вмъквам като отделни изрази за вмъкване чрез скрипт. Но исках да опитам INSERT ALL, но не успях, защото някои редове имат нарушения.
- person Veena Sujith; 07.05.2015
Можете да постигнете обработка на изключения в PL/SQL, но в SQL операторът INSERT ALL е една единствена транзакция. Или всички редове са вмъкнати, или нито един. Това е основното правило за атомарност.
- person Lalit Kumar B; 07.05.2015