1

我正在编写一个触发器以在删除之前将一行复制到另一个表。我似乎无法让它只用一行。我在这里查看了很多帖子,他们将 where 语句设置为类似于 where id = existingId; 或类似的东西。我似乎无法弄清楚如何让触发器只复制一行。或者如何告诉它当前行是什么。我不能在 where 语句中使用表中的特定值(如 id、name 等),因为我不知道要选择哪一行。谢谢!

这是我到目前为止所拥有的:

create or replace TRIGGER archive_tbl
BEFORE DELETE ON STUDENT
BEGIN
INSERT INTO ARCHIVE_STUDENT (stdid, fname, lname, mi, majorid, address, city, state, zip, phone, advid)
SELECT * FROM STUDENT
WHERE ????
END;
4

2 回答 2

1

对于 Oracle,您可以使用:old.col1引用即将被删除的行。for each row如果您这样做,请务必声明触发器。

INSERT INTO YourTable (col1, col2, col3)
VALUES (:old.col1, :old.col2, :old.col3)

对于 SQL Server,您可以使用deleted 特殊表。它包含已删除的行。

INSERT INTO YourTable (col1, col2, col3)
SELECT col1, col2, col3 FROM deleted
于 2013-08-03T16:41:57.207 回答
1

在触发器上,您可以引用newold转换变量,让您查看记录的值(在删除的情况下,只有旧的)。

您无法从 Student 中选择值,因为您已经将其删除,因此您要么对每一列使用 old.column,要么查询已删除的表,就像 Andomar 在他的回答中提到的那样。

于 2013-08-03T16:49:12.253 回答