MySQL - ist Es möglich, zum aufrufen von Funktionen zum ausführen von trigger-Operationen?
In meinem schema habe ich viele Tabellen mit gemeinsamen Felder, die ich ausfüllen muss. Diese sind etwar control-Felder, wie dieses lieben:
id_db_user
date_creation
date_last_update
Habe ich getan, zwei Trigger füllen Sie diese Felder aus:
-- Trigger DDL Statements
delimiter |
CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES
FOR EACH ROW BEGIN
SET NEW.id_db_user = current_user;
SET NEW.date_creation = current_timestamp;
END;
| delimiter ;
delimiter |
CREATE TRIGGER control_update BEFORE UPDATE ON EZT_SOCIETIES
FOR EACH ROW BEGIN
SET NEW.date_last_update = current_timestamp;
END;
| delimiter ;
Meine Frage ist: Kann ich die schreiben Sie eine Funktion aufrufen, die Vorgänge im inneren der Auslöser? So etwas wie dieses:
function fn_control_insert
SET NEW.id_db_user = current_user;
SET NEW.date_creation = current_timestamp;
dann rufen Sie diese Funktion in den trigger wie:
delimiter |
CREATE TRIGGER control_insert BEFORE INSERT ON EZT_SOCIETIES
FOR EACH ROW BEGIN
call fn_control_insert;
END;
| delimiter ;
Dies ist möglich, in MySQL?
Beste Grüße,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist nicht möglich, leider, noch können Sie NEUE und ALT als Parameter noch-Funktion können die Parameter OUT oder INOUT (also beschreibbar), so die kurze Antwort ist Nein.
Aufrufen Sie können eine Funktion aus einem trigger (sofern die Funktion nicht gegen eine der MySQL-trigger, Einschränkungen, wie z.B. das ändern der Tabelle, die den trigger angebracht ist), aber Sie müssen übergeben Sie die Funktion jeder einzelnen NEUEN oder ALTEN Feld, das Sie brauchen, um zu Lesen, und die Funktion wird nicht in der Lage zu schreiben, um Sie — alles, was Sie tun können, aus einer Funktion einen Wert zurückzugeben.
Erklären
date_creation
Feld als TIMESTAMP mit "ON UPDATE CURRENT_TIMESTAMP" - Klausel. Das Feld wird automatisch aktualisiert, mit CURRENT_TIMESTAMP Wert auf INSERT-oder UPDATE-Anweisungen. Mehr Informationen - Automatische Initialisierung und Aktualisierung der für TIMESTAMP.Nur NEUE.id_db_user Wert in
control_insert
trigger -SET NEW.id_db_user = current_user;
.Entfernen
control_update
auslösen.