【发布时间】:2015-11-05 11:08:30
【问题描述】:
我想在插入操作之后执行一个函数,该操作通过调用另一个函数来访问新插入的数据。这就是为什么我不能使用插入后触发器。因为,内部函数不使用 ":new" 访问数据。 有没有办法先根据触发器进行插入,然后执行函数?
trigger insert_to_A after insert on tableX for each row
begin
insert into tableA values (function1(:new.field1));
end;
create or replace function function1(abc number) return number as
begin
select nvl(field1,-1)
into nMax1
from tableX
where field1= abc;
end;
所以,function1 正在尝试访问其主体中的 tableX,我相信这就是问题所在。我希望这能解决问题。
【问题讨论】:
-
您能否详细说明一下。目前尚不清楚您的确切要求是什么。你想让插入的行以不同的方式处理它吗?如果是,您可以使用
RETURNING INTO子句。看看这里的例子lalitkumarb.com/2015/04/07/… -
我认为这与我试图以任何方式解释的内容无关。我想在插入操作后执行一个函数。但我希望插入操作和触发器不是以原子方式执行的。我希望首先执行插入操作,以便我可以在不使用“:new”关键字的情况下对表的新状态(插入新行)运行一个函数。我希望这能让它更清楚一点
-
也许举个例子会更好。如果您可以编辑您的问题并添加测试用例。我仍然对您的流程感到困惑。触发器是否已经在桌面上做某事?函数要做什么?
-
你为什么不想使用:new?另外,你不能敲出一个简单的测试用例来证明你正在尝试做什么吗? (例如,创建表和插入语句,以及您所追求的结果)。这样,我们就有更好的机会 a) 找出你所追求的,b) 帮助你实现它。目前有点“我有这件事,我想做另一件事,我希望它最终像这样{挥手}”;几乎不可能破译,因为我们没有和你坐在一起,也看不到你的屏幕。
-
所以你只想在
tableX上插入完成后才执行function1?
标签: oracle function plsql triggers insertafter