我想用pl/sql编写一个触发器。我的第一个目的是比较两种时间戳数据类型(a和b)。如果其中一个大于另一个,例如a>b,我将更新另一个表上的列。我试图写的触发器如下。
CREATE OR REPLACE TRIGGER trigger_name
AFTER INSERT OR UPDATE OR DELETE ON views
FOR EACH ROW
DECLARE
A views.X%TYPE;
B views.Y%TYPE;
C views.Z%TYPE;
BEGIN
SELECT X, Y, Z INTO A, B, C FROM views;
IF A>B THEN
update another_table set D=' ' and E='UNRESOLVED' where column1=A;
ELSE
dbms_output.put_line('ABC: ' || A || ' < ' || 'CDE' || B);
END IF;
END;
如果我执行这个触发器,我会得到如下错误。
错误报告:ora-25001:kan inte skapa den hä触发器类型är类型av vy 25001。00000-“无法在视图上创建此触发器类型”原因:只能在视图上创建instead of触发器操作:将触发器类型更改为而不是。
事先谢谢你的帮助。
1条答案
按热度按时间pes8fvy91#
你就快到了。这只是句法上的混乱。不能创建触发的触发器
BEFORE
或者AFTER
插入、更新或删除视图,但可以创建触发INSTEAD OF
插入、更新或删除:插入或更新或删除视图之前/之后的表,而不是插入或更新或删除视图
而且,正如@belayer所写,您不(也不应该)使用select,而是使用名为
:new
对于插入或更新期间的新值,或对于更新或删除期间的旧值,使用“:old”记录。你的扳机看起来像: