Ich führe PostgreSQL-9.2.4 aus
Ist es möglich, 2 Funktionen von einem Trigger aus aufzurufen?
Angenommen, ich habe zwei Funktionen für zwei verschiedene Tabellen, die ausgeführt werden sollen, wenn folgende Triggerbrände auftreten:
Auslösen:
CREATE TRIGGER start ON system_status FOR EACH ROW
WHEN ((new.event = start_task))
EXECUTE PROCEDURE ...()
Funktion 1: (Wenn die Aufgabe startet => Entfernen Sie alle zuvor zugewiesenen nächsten Aufgaben für dieses System.)
CREATE FUNCTION void_next_task() RETURNS trigger AS $$
BEGIN
DELETE FROM tasks_status ts
WHERE ts.system = NEW.system
AND ts.event = 'next_task';
RETURN NEW;
END;
$$
LANGUAGE plpgsql
Funktion 2:
(Wenn eine Kombination von eingefügt task
und system
bereits in der Tabelle dargestellt ist => Markieren Sie frühere Datensätze mit dieser Kombination als deleted
)
CREATE FUNCTION void_dup_task() RETURNS trigger AS $$
BEGIN
UPDATE system_status ss
SET deleted = 'TRUE'
WHERE ss.system = NEW.system
AND ss.task = NEW.task
AND ss.deleted IS FALSE;
RETURN NEW;
END;
$$
LANGUAGE plpgsql
Am Ende hatte ich folgende Möglichkeiten, um das Problem zu beheben:
- Einen Trigger haben, der zwei Funktionen aufruft;
- Eine Funktion zu haben, die eine Tabelle aktualisiert und eine andere löscht;
- Zwei genau gleiche Trigger und zwei verschiedene Funktionen haben;
Bevor ich mit der Implementierung der Lösung 3
fortfahre, können Sie mir raten, ob eine Lösung vorliegt 1
oder 2
überhaupt möglich ist?
quelle