2017-06-10 152 views
1

Hei guys。這一點很簡單。我有一些表叫做人,學生,僱員。 IDPERSON = idstudent,idperson = idemployee。到現在爲止還挺好。級聯觸發不起作用

我試圖做一個刪除級聯觸發器,每當我刪除一個人,它刪除表中的行人,並刪除取決於如果該人被放在表學生或僱員。

因爲在我找到的人名(姓名,IDPERSON,電話,電子郵件等)和Student/Emplyee中,我發現了更多的技術細節,比如:ScheduleEmployee,IdAccomodationStudent等等。

CREATE FUNCTION stergereStudenti() RETURNS trigger AS $$ 
BEGIN 
DELETE FROM persoane WHERE idpersoana = OLD.idpersoana; 
RETURN NULL; 
END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER trgStergereStudenti BEFORE DELETE ON TABLE studenti 
FOR EACH ROW EXECUTE stergereStudenti(); 

由於某種原因,它不工作。我看着舊的stackoverflow帖子,我得到了上面的觸發器,並在我的數據庫addapted。但是,不能正常工作。請幫助:(

+0

應該不是你的扳機上'刪除之前表persoane'? –

+0

嗯..不這麼認爲.. –

+1

你說你想從PERSON表中刪除一個條目,並刪除相關的STUDENT或EMPLOYEE。學生被刪除,它會刪除關聯的人員。你實際執行什麼聲明? –

回答

0

觸發器看起來像錯誤的工具才行,相反,你可以使用與on delete cascade選項外鍵:

ALTER TABLE student 
ADD CONSTRAINT student_fk 
FOREIGN KEY(idpersoana) 
REFERENCES person(idpersoana) ON DELETE CASCADE; 
+0

嗯..在我的項目中,我應該使用觸發器..如果你有任何關於如何觸發應該看起來像,如果不是,我會改變桌子。 –