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

Impossibile creare un TRIGGER dall'interno di un'altra routine memorizzata:cos'è un'altra routine memorizzata?

Il trigger che mostri sopra va bene.

modifica: Quando crei un trigger nella GUI di phpMyAdmin, devi solo inserire il corpo del trigger nella Definizione riquadro, ovvero la parte BEGIN...END .

Questo perché phpMyAdmin cercherà di essere intelligente e scrivere l'intestazione del trigger per te in base agli altri elementi che inserisci (nome, tabella, ora, evento).

Ecco il modo giusto per definire un trigger in phpMyAdmin:

Se scrivi CREATE TRIGGER... header all'interno del corpo, confonderà MySQL perché vedrà CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Questo fa pensare a MySQL che stai definendo un trigger la cui prima istruzione è CREATE TRIGGER .

Come problema collaterale della tua domanda originale, suggerirei alcune modifiche nel corpo del trigger:

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

Le modifiche:

  • Riferimento NEW.ID invece di Delivery.ID .
  • Usa SQL-92 JOIN sintassi anziché SQL-89 "stile virgola" join.
  • Usa UPDATE multi-tabella con join, invece di EXISTS con subquery correlata.
  • Utilizza le virgolette singole per le stringhe invece delle virgolette doppie.
  • Termina l'UPDATE frase con un punto e virgola.