避免价值重复

时间:2015-02-15 14:56:55

标签: oracle plsql

假设我们有表A:

Customer_number  |  Region_id
-----------------------------
123              |  1
132              |  1
256              |  2
213              |  3

我想将一些客户插入到表A中。但是每次我想要将新客户插入A时,我必须首先从具有Region_id的A行中删除我想要插入到A中的行。 例如,我想将以下行插入A:

Customer_number  |  Region_id
-----------------------------
564              |  1
846              |  5

但是我希望oracle以某种方式给我一个暗示A中已经有Region_id = 1的提示​​,所以我必须首先从A中删除它然后只插入我的新行。结果应如下所示:

Customer_number  |  Region_id
-----------------------------
256              |  2
213              |  3
564              |  1
846              |  5

请提出任何方法来限制插入由Region_id相交的行,如上例所示。

1 个答案:

答案 0 :(得分:2)

我认为在桌面上创建触发器应该可以正常工作。

create or replace trigger trg_a_region_id before insert on A for each row
begin
    delete a where Region_id=:new.Region_id;
    if sql%rowcount>0
    then
      dbms_output.put_line(sql%rowcount ||' rows deleted');
    end if;
 end;

而不是删除语句,您可以引发用户定义的异常(说需要手动删除,或者您想要的任何内容)。

然而,从设计的角度来看,使用触发器并不总是很好的解决方案。我宁愿把业务逻辑放在存储过程中。

相关问题