Sql 在Oracle中,如何触发用户更新与系统日期相比较的列?

Sql 在Oracle中,如何触发用户更新与系统日期相比较的列?,sql,oracle,triggers,Sql,Oracle,Triggers,我写这个触发器是为了更新某个列。我写的触发器是: CREATE TRIGGER updateotMark BEFORE UPDATE ON sBookBorrow FOR EACH ROW WHEN(SYSDATE-to_date(etime)>15) BEGIN UPDATE otMark = 1; END; / 这是我第一次使用触发器,所以我不知道出了什么问题。有什么想法吗?谢谢大家的回答 更新:这是我在控制台中得到的。我做错了什么? 更新2:现在它有一条错误消息:第5行出错: O

我写这个触发器是为了更新某个列。我写的触发器是:

CREATE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
WHEN(SYSDATE-to_date(etime)>15)
BEGIN
UPDATE otMark = 1;
END;
/
这是我第一次使用触发器,所以我不知道出了什么问题。有什么想法吗?谢谢大家的回答

更新:这是我在控制台中得到的。我做错了什么?

更新2:现在它有一条错误消息:第5行出错:
ORA-04076:无效的新规范或旧规范

只需更新:新值

CREATE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
WHEN(SYSDATE-to_date(etime)>15)
BEGIN
:new.otmark = 1;
END;
“时间”的数据类型是什么

如果是date,则不需要使用“to_date”函数。例如(系统日期-时间>15)

如果是VARCHAR2,则需要输入格式。例如截止日期(时间,'YYYYMMDD')

但是,在SQLPlus中使用将提供有关错误的更多信息

SHOW ERROR TRIGGER updateotMark;
让我们试试这个

CREATE OR REPLACE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
  WHEN (SYSDATE - NEW.etime > 15)
BEGIN
   :NEW.otmark := 1;
END;

您想要实现什么逻辑?您得到了什么结果/错误?当系统日期比无法运行的时间(即日期)多15天时,我想将otmark设置为1,我没有任何东西。什么是
otmark
?列还是表?@JeffreyKemp表中的列sbookborrow我在更新中放了我的控制台的屏幕截图。知道发生的原因吗?我想您会收到错误消息,因为您需要指定在“WHEN(SYSDATE-to_date(etime)>15)”中使用的时间是新的还是旧的。触发器没有错误,但是我在创建触发器时收到一条错误消息:第5行错误:ORA-04076:无效的新规范或旧规范请尝试使用SYSDATE-NEW.etime>15。它与警告一起工作,警告是:触发器是由编译错误创建的。您能在我的回答中尝试我的代码吗?只需将“=”更改为“:”。