【发布时间】:2013-04-28 04:19:42
【问题描述】:
给定一个简单的员工表(id、lastname、firstname),任务要求我编写一个 stor proc,它接受名字和姓氏,计算下一个 id 并将新记录插入表中。就这样完成了。下一部分要求编写一个触发器,每当发生新的 INSERT 时,该触发器将调用此存储过程。我的理解是,这个触发器应该拦截触发它的插入语句,提取它的参数并运行插入的 stor proc INSTEAD(不是之前或之后)。问题是,instead-of 触发器似乎只适用于我不允许编写的视图。关于如何解决这个问题的任何想法?
感谢您的意见!
【问题讨论】:
-
基本上,INSERT 甚至不应该接触表格 - 它的所有工作都需要由 stor proc 执行。有没有办法通过前/后触发机制来实现这一点?
-
我想说这是不可能的,请在此处查看 Tom Kyte 的评论:asktom.oracle.com/pls/apex/…。如果这个任务真的是要求你在一个表上写一个代替触发器,那么这是一个愚蠢的任务。
-
这就是我对它的感觉。谢谢你的链接。
-
实际上它只需要我使用触发器->存储过程方法。不指定使用什么类型的触发器。似乎 BEFORE 和 AFTER 触发器不会阻止插入的发生。你知道 BEFORE 触发器是否可以“覆盖”插入语句吗?
-
如果触发器的目的只是设置一个新的 ID,那么你可以使用 BEFORE 触发器来设置 ID,然后让插入发生。在 BEFORE 触发器中,您可以分配给
:new.columnname以更改插入到列中的值。
标签: stored-procedures plsql triggers