Как сделать оператор вставки повторно запускаемым? - PullRequest
0 голосов
/ 18 марта 2019

Необходимо добавить два следующих оператора вставки:

insert into table1(schema, table_name, table_alias) 
values ('ref_owner','test_table_1','tb1');

insert into table1(schema, table_name, table_alias) 
values ('dba_owner','test_table_2','tb2');

Вопрос в том, как сделать эти два оператора вставки повторно запускаемыми, если эти два оператора вставки скомпилированы снова, должно появиться сообщение об ошибке «существует строка с ошибкой»или что-то в этом роде ...?

Дополнительные примечания: 1. Однако я видел примеры слияния в Oracle, только когда вы используете две таблицы для сопоставления записей.В этом случае я использую только одну таблицу.2. Таблица не имеет первичных, уникальных или внешних ключей - проверьте только ограничения для одного из столбцов.

Любая помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Вы можете использовать инструкцию MERGE следующим образом:

MERGE into table1 t1
  USING (SELECT 'ref_owner' AS SCHEMA_NAME, 'test_table_1' AS TABLE_NAME, 'tb1' AS ALIAS_NAME FROM DUAL
         UNION ALL
         SELECT 'dba_owner', 'test_table_2', 'tb2' FROM DUAL) d
    ON (t1.SCHEMA = d.SCHEMA_NAME AND
        t1.TABLE_NAME = d.TABLE_NAME)
  WHEN NOT MATCHED THEN
    INSERT (SCHEMA, TABLE_NAME, TABLE_ALIAS) 
    VALUES (d.SCHEMA_NAME, d.TABLE_NAME, d.ALIAS_NAME)

Удачи.

0 голосов
/ 18 марта 2019

У вас должен быть первичный ключ, особенно если вы хотите проверить наличие дублирующихся записей и целостность данных.

Укажите первичный ключ для вашей таблицы или, если у вас что-то нетЧтобы сделать это, создайте уникальное ограничение для всех столбцов в таблице, чтобы избежать повторяющихся строк.

...