phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

Kann keinen TRIGGER aus einer anderen gespeicherten Routine heraus erstellen -- Was ist eine andere gespeicherte Routine?

Der Trigger, den Sie oben zeigen, ist in Ordnung.

Bearbeiten: Wenn Sie einen Trigger in der GUI von phpMyAdmin erstellen, müssen Sie nur den Hauptteil des Triggers in die Definition eingeben Bereich, also der Teil BEGIN...END .

Dies liegt daran, dass phpMyAdmin versuchen wird, clever zu sein und den Trigger-Header basierend auf den anderen von Ihnen eingegebenen Elementen (Name, Tabelle, Zeit, Ereignis) für Sie zu schreiben.

So definieren Sie einen Trigger in phpMyAdmin richtig:

Wenn Sie den CREATE TRIGGER... schreiben Kopfzeile innerhalb des Körpers, wird es MySQL verwirren, weil es CREATE TRIGGER... CREATE TRIGGER... BEGIN...END sehen wird . Dadurch denkt MySQL, dass Sie einen Trigger definieren, dessen erste Anweisung CREATE TRIGGER ist .

Als Nebenproblem zu Ihrer ursprünglichen Frage würde ich einige Änderungen im Hauptteil des Triggers vorschlagen:

CREATE TRIGGER Update_Last_Transit_Status AFTER INSERT ON Delivery 
FOR EACH ROW
BEGIN
  UPDATE Transportation
    INNER JOIN Transit ON Transit.Transportation_ID = Transportation.ID
    INNER JOIN Route ON Transit.ID = Route.Transit_ID
  SET Transportation.Status = 'Dispatched'
  WHERE Route.Delivery_ID = NEW.ID
    AND Transportation.Status = 'In Branch';
END

Die Änderungen:

  • Referenz NEW.ID statt Delivery.ID .
  • Verwenden Sie SQL-92 JOIN Syntax anstelle von SQL-89-Joins im "Komma-Stil".
  • Verwenden Sie UPDATE für mehrere Tabellen mit Joins statt EXISTS mit korrelierter Unterabfrage.
  • Verwenden Sie einfache Anführungszeichen für Zeichenfolgen anstelle von doppelten Anführungszeichen.
  • Beenden Sie das UPDATE Anweisung mit einem Semikolon.