具有两个表的 Oracle 触发器
Oracle Trigger with two tables
我想构建一个触发器来修复程序中的某种错误。 t2 中有不同的行,程序在 t1 中将选定的行合并在一起,并为它们提供一个 id。所以 t2 中的 n 行是 t1 中的 1 行。现在我想限制当 t2 中的客户不同时,您可以将 t2 中的多行放在一起。当发生这种情况时,触发器应该在 t1 的文本字段中写入一条消息。
到目前为止我得到了这个:
create or replace
trigger multiple after insert on t1
referencing new as new
for each row
declare count1 number;
begin
select count(distinct t2.customer)
into count1
from t2
where trim(t2.id)= trim(:new.id);
if count1 >=2
then
:new.txt_field :='Please delete.';
end if;
end;
但现在有一个问题,此时 t2.id 为空,将在程序中更新一步。看起来程序在 t1 中插入了带有 t1.id 的合并行,然后它更新了每一行的 t2.id。
有人知道我该如何解决这个问题吗?
问候
问题不清楚,但据我了解,您在 t2 -> t1 中存在多对一关系,并且当在 t2 上插入多行时,您希望在 t1 中插入一行。 t2 上的此 put 语句级触发器的解决方案,您需要为每个行关键字删除它;如果此记录在 t1 中是否可用,您还需要应用内部检查触发器。
您好,很抱歉回答晚了,问题不清楚。
我自己解决了这个问题。
我创建了一个带触发器的暂存 table,这对我来说很好用。
谢谢大家的意见。
我想构建一个触发器来修复程序中的某种错误。 t2 中有不同的行,程序在 t1 中将选定的行合并在一起,并为它们提供一个 id。所以 t2 中的 n 行是 t1 中的 1 行。现在我想限制当 t2 中的客户不同时,您可以将 t2 中的多行放在一起。当发生这种情况时,触发器应该在 t1 的文本字段中写入一条消息。 到目前为止我得到了这个:
create or replace
trigger multiple after insert on t1
referencing new as new
for each row
declare count1 number;
begin
select count(distinct t2.customer)
into count1
from t2
where trim(t2.id)= trim(:new.id);
if count1 >=2
then
:new.txt_field :='Please delete.';
end if;
end;
但现在有一个问题,此时 t2.id 为空,将在程序中更新一步。看起来程序在 t1 中插入了带有 t1.id 的合并行,然后它更新了每一行的 t2.id。 有人知道我该如何解决这个问题吗?
问候
问题不清楚,但据我了解,您在 t2 -> t1 中存在多对一关系,并且当在 t2 上插入多行时,您希望在 t1 中插入一行。 t2 上的此 put 语句级触发器的解决方案,您需要为每个行关键字删除它;如果此记录在 t1 中是否可用,您还需要应用内部检查触发器。
您好,很抱歉回答晚了,问题不清楚。 我自己解决了这个问题。 我创建了一个带触发器的暂存 table,这对我来说很好用。
谢谢大家的意见。