postgresql 删除涉及两个表的记录,并将这条记录存储在第三条记录中
Postgresql delete record involving two tables and store this record in the third record
我正在尝试从 table 'student' 中删除一条记录,在级联删除中它会将其从 'entry' table 中删除。但在删除之前我需要将这条记录存储在第三个 table 'cancel'.
这是我到目前为止的结果:
DELETE FROM "CMPS".student
WHERE sno = '1';
CREATE TRIGGER canceled BEFORE DELETE
ON entry
FOR EACH ROW
EXECUTE PROCEDURE trigger_backup_row
CREATE OR REPLACE FUNCTION trigger_backup_row(integer)
RETURNS trigger AS
$$
BEGIN
INSERT INTO cancel (eno, excode, sno) values (NEW.eno, NEW.excode, NEW.sno);
RETURN NEW;
END;
$$
language PLPGSQL
但是返回错误。任何帮助将不胜感激。
我想你需要:
CREATE OR REPLACE FUNCTION trigger_backup_row()
RETURNS trigger AS
$$
BEGIN
INSERT INTO cancel (eno, excode, sno) values (OLD.eno, OLD.excode, OLD.sno);
RETURN OLD;
END;
$$
language PLPGSQL
;
CREATE TRIGGER canceled BEFORE DELETE
ON entry
FOR EACH ROW
EXECUTE PROCEDURE trigger_backup_row()
;
- 触发函数不使用参数
- 删除时你没有任何
NEW
行 - 只有 OLD
行
我正在尝试从 table 'student' 中删除一条记录,在级联删除中它会将其从 'entry' table 中删除。但在删除之前我需要将这条记录存储在第三个 table 'cancel'.
这是我到目前为止的结果:
DELETE FROM "CMPS".student
WHERE sno = '1';
CREATE TRIGGER canceled BEFORE DELETE
ON entry
FOR EACH ROW
EXECUTE PROCEDURE trigger_backup_row
CREATE OR REPLACE FUNCTION trigger_backup_row(integer)
RETURNS trigger AS
$$
BEGIN
INSERT INTO cancel (eno, excode, sno) values (NEW.eno, NEW.excode, NEW.sno);
RETURN NEW;
END;
$$
language PLPGSQL
但是返回错误。任何帮助将不胜感激。
我想你需要:
CREATE OR REPLACE FUNCTION trigger_backup_row()
RETURNS trigger AS
$$
BEGIN
INSERT INTO cancel (eno, excode, sno) values (OLD.eno, OLD.excode, OLD.sno);
RETURN OLD;
END;
$$
language PLPGSQL
;
CREATE TRIGGER canceled BEFORE DELETE
ON entry
FOR EACH ROW
EXECUTE PROCEDURE trigger_backup_row()
;
- 触发函数不使用参数
- 删除时你没有任何
NEW
行 - 只有OLD
行