Oracle触发器,依赖于第二个触发器生成的密钥

时间:2016-10-08 10:21:42

标签: sql oracle plsql triggers

我对触发器有疑问。对于我的数据库分配,我必须创建一个自动生成ID号的触发器,我已经完成了。 问题是需要进行第二次触发,同时对同一数据起作用。两者都是插入物。由于他们必须分开,我不知道如何使这项工作。 根据我的教导,在最近的添加中触发动作的方法是使用:

HDR=NO

其中ID是主键,但是当触发器生成ID时,这对我不起作用。是否有一种创建触发器的方法,该触发器作用于添加到表中的最新行而不引用主键?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚为什么你需要两个触发器,但让我们假设它真的有意义(我怀疑)。

第一个触发器是否从序列中生成ID?在这种情况下,您可以使用序列的值CURRVAL。此伪列在不增加值的情况下返回序列的当前值,请参阅Sequence Pseudocolumns

如果这不符合您的需要,您可以编写一个程序,然后将其称为触发器。

会是这样的:

create procedure PROC(aRow in ROWID) as
begin
...
end;

create first_trigger ....
begin
   ... whatever is needed at first trigger.
   PROC(NEW.ROWID);
end;


create second_trigger ....
begin
   ... whatever is needed at second trigger.
   PROC(NEW.ROWID);
end;

两个触发器都在同一行上运行。您还可以将当前行值写入PL / SQL变量并通过Statement-Trigger处理它们(即没有行级触发器)