2
我試圖從表中刪除單個行,它可以觸發並將所有相關信息(多行)複製到第三個表中。我下面建造一個簡單的例子:使用單個SQL觸發器從單個刪除複製多行?
表:學生
NAME AGE
----- ------
Mark 19
Jim 21
Scott 22
表:牌號
NAME GRADE
----- ------
Mark 95
Mark 98
Jim 60
Scott 100
Scott 79
Scott 77
表:備份(我什麼觸發完成)
SQL> DELETE FROM STUDENTS WHERE NAME='MARK';
SQL> SELECT * FROM BACKUP;
NAME AGE GRADE
----- ------ ------
Mark 19 95
Mark 19 98
在上例中,刪除行「Mark ... 30」也會刪除第二個表中的「Mark」作爲名稱的兩行。我不知道如何做到這一點。我能夠編譯觸發器代碼,但調用「DELETE FROM STUDENTS WHERE NAME ='MARK'」返回太多行錯誤。下面是我的代碼
我的代碼
CREATE OR REPLACE TRIGGER save_the_grades
BEFORE DELETE
ON grades
FOR EACH ROW
DECLARE
v_grade number(3);
BEGIN
SELECT grade INTO v_grade FROM Grades WHERE Names=:old.name;
INSERT INTO backup
(name, age, grade)
VALUES
(:old.name, :old.age, v_grade);
END;
如果你想要保持刪除記錄周圍,是不是一個更好的系統是有一個標誌的錶行和一個視圖,只返回不是'標記爲已刪除。 –
如果將StackOverflow的暴怒帶給我的話,這與需要觸發器的作業問題有關。然而,這個問題遠遠大於這個問題。我只是想知道如何去做。 – Noah
您已經爲MySQL,SQL Server和Oracle添加了標籤。這些是三種不同的數據庫,具有三種不同的過程語言擴展和三種非常不同的語法集來定義觸發器。我從剩下的問題中猜測出你正在使用Oracle,因此應該刪除MySQL和SQL Server標記。 –