Как вставить несколько операторов вставки SQL - PullRequest
0 голосов
/ 24 января 2019

Есть таблица Person (id, name).Я вставляю более 1000 записей в личную таблицу.Идентификатор и имя должны быть уникальными.Я написал что-то вроде этого

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

Я получаю уникальное ограничение для имени в этом запросе.Как узнать, какая именно запись не работает?Все, что я вижу в журналах, это

Ошибка запуска в строке: 3 в команде - ORA-00001: уникальное ограничение (UN_PERSON_NAME) нарушено.

Это не говоритточная запись, которая является дубликатом.

Ответы [ 3 ]

0 голосов
/ 24 января 2019
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
0 голосов
/ 24 января 2019

К сожалению, Oracle не поддерживает множественные вставки, используя один оператор VALUES(). Я обычно подхожу к этому как:

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

Одним из преимуществ этого подхода является то, что вы можете использовать подзапрос и назначить идентификатор:

INSERT PERSON (id, name)
    SELECT rownum, x.name
    FROM (SELECT 'MAYUR' FROM DUAL UNION ALL
          SELECT 'SALUNKE' FROM DUAL UNION ALL 
          .....
         ) x
0 голосов
/ 24 января 2019

Вам не хватает ключевого слова values.Попробуйте это!

INSERT ALL 
       INTO PERSON values(1, 'MAYUR')
       INTO PERSON values(2, 'SALUNKE') 
       .....(1000 records)
SELECT * FROM DUAL;    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...