使用SQL在触发器中使用多个条件

使用SQL在触发器中使用多个条件,sql,oracle,triggers,conditional,Sql,Oracle,Triggers,Conditional,我试图创建一个触发器,在更新表detailrent之后更新一个名为VIDEO的表。我试图使用IF-ELSE条件来满足多种情况 这就是我的代码: CREATE OR REPLACE TRIGGER TRG_VIDEORENTAL_UP AFTER UPDATE OF DETAIL_RETURNDATE ON DETAILRENTAL FOR EACH ROW BEGIN IF :NEW.DETAIL_RETURNDATE IS NULL THEN UPDATE VIDEO

我试图创建一个触发器,在更新表detailrent之后更新一个名为VIDEO的表。我试图使用IF-ELSE条件来满足多种情况

这就是我的代码:

CREATE OR REPLACE TRIGGER TRG_VIDEORENTAL_UP
AFTER UPDATE OF DETAIL_RETURNDATE ON DETAILRENTAL
FOR EACH ROW
BEGIN  
 IF :NEW.DETAIL_RETURNDATE IS NULL THEN
       UPDATE VIDEO
       SET VID_STATUS = 'OUT'
       WHERE :NEW.VID_NUM = VID_NUM;

ELSEIF
  :NEW.DETAIL_RETURNDATE > SYSDATE
       UPDATE VIDEO
       SET VID_STATUS = 'OUT'
       WHERE:NEW.VID_NUM = VID_NUM;

ELSEIF
  :NEW.DETAIL_RETURNDATE < SYSDATE OR :NEW.DETAIL_RETURNDATE = SYSDATE 
       UPDATE VIDEO
       SET VID_STATUS = 'IN'
       WHERE :NEW.VID_NUM = VID_NUM;

ELSE 
   :NEW.DETAIL_RETURNDATE = '01/01/01'
       UPDATE VIDEO
       SET VID_STATUS = 'LOST'
       WHERE :NEW.VID_NUM = VID_NUM ;

  END IF;
end;
创建或替换触发器TRG\u VIDEORENTAL\u UP
更新详细信息后,返回详细信息租赁的日期
每行
开始
如果:NEW.DETAIL_RETURNDATE为空,则
更新视频
设置VID_状态='OUT'
其中:NEW.VID_NUM=VID_NUM;
埃尔塞夫
:NEW.DETAIL\u RETURNDATE>SYSDATE
更新视频
设置VID_状态='OUT'
其中:NEW.VID_NUM=VID_NUM;
埃尔塞夫
:NEW.DETAIL\u RETURNDATE
这是我运行此代码时收到的错误消息:

第8行错误:PLS-00103:在预期以下情况之一时遇到符号“”:=。(@%


我已经测试了每个条件,以确保每个语句单独工作,但它似乎不能一起工作。

Oracle对多个条件使用
ELSIF
,而不是
ELSEIF


这可能是错误的原因。

除了@Gordon指出的
ELSEIF
之外,那些
ELSEIF
条件仍然需要
THEN

ELSIF
  :NEW.DETAIL_RETURNDATE > SYSDATE THEN
       UPDATE VIDEO
       ...
ELSIF
  :NEW.DETAIL_RETURNDATE < SYSDATE OR :NEW.DETAIL_RETURNDATE = SYSDATE THEN
       UPDATE VIDEO
       ...
ELSIF 
   :NEW.DETAIL_RETURNDATE = '01/01/01' THEN
       UPDATE VIDEO
       ...
或删除该条件:

ELSE
       UPDATE VIDEO
       ...
取决于您实际需要的逻辑

如果确实需要该条件,因此需要使用
ELSIF
,那么在该条件下比较日期的方式也是错误的;
'01/01/01'
是字符串而不是日期,因此您依赖于使用会话的NLS设置的隐式转换,而您可能无法控制该设置。使用
to_date()
具有合适的格式掩码,或:

ELSIF 
   :NEW.DETAIL_RETURNDATE = DATE '2001-01-01' THEN
       UPDATE VIDEO
       ...