phpMyAdmin
 sql >> Base de données >  >> Database Tools >> phpMyAdmin

Impossible de créer un TRIGGER à partir d'une autre routine stockée -- Qu'est-ce qu'une autre routine stockée ?

Le déclencheur que vous montrez ci-dessus est très bien.

modifier : Lorsque vous créez un déclencheur dans l'interface graphique de phpMyAdmin, il vous suffit de saisir le corps du déclencheur dans la Définition volet, c'est-à-dire la partie BEGIN...END .

En effet, phpMyAdmin va essayer d'être intelligent et écrire l'en-tête du déclencheur pour vous en fonction des autres éléments que vous entrez (nom, table, heure, événement).

Voici la bonne façon de définir un déclencheur dans phpMyAdmin :

Si vous écrivez le CREATE TRIGGER... en-tête à l'intérieur du corps, il confondra MySQL car il verra CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Cela fait penser à MySQL que vous définissez un déclencheur dont la première instruction est CREATE TRIGGER .

En complément de votre question initiale, je suggérerais quelques modifications dans le corps du déclencheur :

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

Les changements :

  • Référence NEW.ID au lieu de Delivery.ID .
  • Utilisez SQL-92 JOIN syntaxe au lieu des jointures "style virgule" SQL-89.
  • Utiliser plusieurs tables UPDATE avec des jointures, au lieu de EXISTS avec sous-requête corrélée.
  • Utilisez des guillemets simples pour les chaînes au lieu de guillemets doubles.
  • Terminer la UPDATE déclaration avec un point-virgule.