SQL 删除 IF 语句之前

SQL Before Delete IF statement

好的,所以我在 sql 中写了一个触发器,需要发生的是,如果 t 被删除并且 f.actDepartDateTime 不为空,那么 table 被备份并且然后删除了,但我似乎无法让它工作?

CREATE TABLE BACKUP_table (
      f_id         number,
      t_number      number,
      s_number number
);



CREATE OR REPLACE TRIGGER t_delete
    BEFORE DELETE ON t IF f.actDepartDateTime Not Null
    FOR EACH ROW
BEGIN

   -- insert a row into the backup table  

   INSERT INTO BACKUP_Table (f_id, t_number, s_number)
   VALUES(old.fid, old.tnum, old.sNum);
END;
  • 如果您希望触发器有条件地触发,关键字是 when 而不是 if
  • 进行 null 比较的语法是 is nullis not null
  • 在触发器主体中,您需要在对 :old pseudo-record 的引用前加上冒号

我不确定 f.actDepartureDateTime 应该引用什么——您发布的代码中没有任何 f 别名。我猜 actDepartureDateTime 是 table t 中的一列,并且您想根据该列的 old 值触发触发器。

假设这就是您要查找的内容,这应该有效

CREATE OR REPLACE TRIGGER t_delete
    BEFORE DELETE ON t 
    FOR EACH ROW
    WHEN( old.actDepartDateTime IS Not Null )
BEGIN
  INSERT INTO BACKUP_Table (f_id, t_number, s_number)
    VALUES(:old.fid, :old.tnum, :old.sNum);
END;