假设我们有表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相交的行,如上例所示。
答案 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;
而不是删除语句,您可以引发用户定义的异常(说需要手动删除,或者您想要的任何内容)。
然而,从设计的角度来看,使用触发器并不总是很好的解决方案。我宁愿把业务逻辑放在存储过程中。