SQL只从一个表复制到另一个表 - 如何设置where语句?

时间:2013-08-03 16:36:48

标签: sql oracle triggers

我正在写一个触发器,在删除之前将一行复制到另一个表。我似乎无法让它只用一行。我在这里看了很多帖子,他们将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;

2 个答案:

答案 0 :(得分:1)

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

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

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

INSERT INTO YourTable (col1, col2, col3)
SELECT col1, col2, col3 FROM deleted

答案 1 :(得分:1)

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

您无法从Student中选择值,因为您已经删除了它,因此要么为每个列使用old.column,要么查询已删除的表,就像Andomar在其答案中所述。