避免价值重复

Avert value duplicating

假设我们有 table A:

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

我想在 table A 中插入一些客户。但是每次我想在 A 中插入新客户时,我必须先从 A 中删除我想要的 Region_id 行插入到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 相交的行,如上例所示。

我认为在 table 上创建触发器应该如您所愿。

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;

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

但是,请谨慎使用触发器,从设计的角度来看,它们并不总是一个好的解决方案。我宁愿将业务逻辑放在存储过程中。