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 null
或 is 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;
好的,所以我在 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 null
或is 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;