2017-06-10 4 views
1

Hei Jungs. Der Punkt ist einfach. Ich habe einige Tische namens PERSONS, STUDENTS, MITARBEITER. Und IDPERSON = idstudent, idperson = idemployee. So weit, ist es gut.Cascade-Trigger funktioniert nicht

Ich versuche, eine Löschkaskade auszulösen, dass, wenn ich eine PERSON lösche, löscht sie die Zeile in der Tabelle PERSONS und es löscht abhängig davon, ob diese Person in Tabelle STUDENTEN oder MITARBEITER putten wurde.

Da in der Tabelle PERSONS finde ich nur (Name, IDPERSON, Telefon, E-Mail, etc) und in Student/Emplyee finde ich mehr technische Details, wie: ScheduleEmployee, IdAccomodationStudent, etc. Hoffe, du hast es.

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(); 

Aus irgendeinem Grund funktioniert es nicht. Ich habe alte Stackoverflow-Posts angeschaut und den Trigger oben angeklickt und in meine Datenbank aufgenommen. Aber funktioniert nicht .. Bitte helfen :(

+0

Sollte der Trigger nicht auf sein 'vor dem Löschen auf Tabelle persoane'? –

+0

Hmm .. denken Sie nicht so .. –

+1

Sie sagen, dass Sie einen Eintrag aus der PERSON-Tabelle löschen möchten und die zugeordneten STUDENT oder EMPLOYEE ebenfalls gelöscht haben.Aber was Ihr Trigger tut ist, wenn a STUDENT wird gelöscht, es löscht den zugehörigen PERSON. Was für eine Anweisung führst du gerade aus? –

Antwort

0

Trigger aussehen wie das falsche Werkzeug für den Job Stattdessen könnten Sie einen Fremdschlüssel mit der on delete cascade Option verwenden.

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

Hmm .. In meinem Projekt soll ich einen Trigger verwenden .. Wenn du eine Idee hast wie dieser Trigger aussehen soll , wäre toll, wenn nicht, werde ich den Tisch verändern. –

Verwandte Themen