避免价值重复
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 语句(说明需要手动删除,或任何您想要的)。
但是,请谨慎使用触发器,从设计的角度来看,它们并不总是一个好的解决方案。我宁愿将业务逻辑放在存储过程中。
假设我们有 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 语句(说明需要手动删除,或任何您想要的)。
但是,请谨慎使用触发器,从设计的角度来看,它们并不总是一个好的解决方案。我宁愿将业务逻辑放在存储过程中。