Oracle触发器已编译,但插入时失败
我有下面的触发器Oracle触发器已编译,但插入时失败,oracle,triggers,Oracle,Triggers,我有下面的触发器 CREATE OR REPLACE TRIGGER TRG_RESUME_AFTER_UPDATE BEFORE INSERT OR UPDATE ON RESUME FOR EACH ROW BEGIN :new.modified_date := SYSTIMESTAMP; END; 由谁来编译 TRIGGER TRG_RESUME_AFTER_UPDATE compiled 但是,当我尝试插入时,会出现以下错误: Error at Command Line :
CREATE OR REPLACE TRIGGER TRG_RESUME_AFTER_UPDATE
BEFORE INSERT OR UPDATE ON RESUME
FOR EACH ROW
BEGIN
:new.modified_date := SYSTIMESTAMP;
END;
由谁来编译
TRIGGER TRG_RESUME_AFTER_UPDATE compiled
但是,当我尝试插入时,会出现以下错误:
Error at Command Line : 11 Column : 8
Error report -
SQL Error: ORA-04098: trigger 'D.TRG_RESUME_AFTER_UPDATE' is invalid and failed re-validation
04098. 00000 - "trigger '%s.%s' is invalid and failed re-validation"
*Cause: A trigger was attempted to be retrieved for execution and was
found to be invalid. This also means that compilation/authorization
failed for the trigger.
*Action: Options are to resolve the compilation/authorization errors,
disable the trigger, or drop the trigger.
PL/SQL对象可以“编译”,但仍有错误。听起来,无论你使用什么样的客户端程序,都可能没有给你适当的反馈。(在SQLPlus中,应该是“使用编译错误创建触发器”。)
在任何情况下,要做的事情是查询用户的错误,以找出错误是什么。由于触发器非常简单,我猜表中不存在modified_date
,或者它是一种时间戳无法隐式转换的数据类型。如果是DATE
,则使用SYSDATE
比使用SYSTIMESTAMP
PL/SQL对象可以“编译”,但仍然有错误更合适。听起来,无论你使用什么样的客户端程序,都可能没有给你适当的反馈。(在SQLPlus中,应该是“使用编译错误创建触发器”。)
在任何情况下,要做的事情是查询用户的错误,以找出错误是什么。由于触发器非常简单,我猜表中不存在modified_date
,或者它是一种时间戳无法隐式转换的数据类型。如果是DATE
,则使用SYSDATE
比使用SYSTIMESTAMP
PL/SQL对象可以“编译”,但仍然有错误更合适。听起来,无论你使用什么样的客户端程序,都可能没有给你适当的反馈。(在SQLPlus中,应该是“使用编译错误创建触发器”。)
在任何情况下,要做的事情是查询用户的错误,以找出错误是什么。由于触发器非常简单,我猜表中不存在modified_date
,或者它是一种时间戳无法隐式转换的数据类型。如果是DATE
,则使用SYSDATE
比使用SYSTIMESTAMP
PL/SQL对象可以“编译”,但仍然有错误更合适。听起来,无论你使用什么样的客户端程序,都可能没有给你适当的反馈。(在SQLPlus中,应该是“使用编译错误创建触发器”。)
在任何情况下,要做的事情是查询用户的错误,以找出错误是什么。由于触发器非常简单,我猜表中不存在
modified_date
,或者它是一种时间戳无法隐式转换的数据类型。如果是日期
,则使用SYSDATE
比SYSTIMESTAMP
更合适。好的调用Dave是SYSDATE而不是timeStamp好的调用Dave是SYSDATE而不是timeStamp好的调用Dave是SYSDATE而不是timeStamp好的调用Dave是SYSDATE而不是timeStamp