如何使插入语句可重新运行?

时间:2019-03-18 18:29:11

标签: oracle sql-insert

需要添加以下两个插入语句:

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中Merge的示例,仅当您使用两个表来匹配记录时才如此。在这种情况下,即时消息仅使用单个表。 2.该表没有任何主键,唯一键或外键-仅检查列之一上的约束。

我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

具有主键,尤其是当您要检查重复记录和数据完整性时。

为表提供主键,或者,如果您不希望这样做,请为表中的所有列创建唯一约束,因此不可能有重复的行。

答案 1 :(得分:0)

您可以使用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)

好运。