sql >> Base de Datos >  >> Database Tools >> phpMyAdmin

No se puede crear un TRIGGER desde dentro de otra rutina almacenada. ¿Qué es otra rutina almacenada?

El activador que muestra arriba está bien.

editar: Cuando crea un disparador en la GUI de phpMyAdmin, solo necesita ingresar el cuerpo del disparador en la Definición panel, en otras palabras, la parte BEGIN...END .

Esto se debe a que phpMyAdmin intentará ser inteligente y escribirá el encabezado de activación por usted en función de los otros elementos que ingrese (nombre, tabla, hora, evento).

Esta es la forma correcta de definir un disparador en phpMyAdmin:

Si escribe el CREATE TRIGGER... encabezado dentro del cuerpo, confundirá a MySQL porque verá CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Esto hace que MySQL piense que está definiendo un disparador cuya primera declaración es CREATE TRIGGER .

Como un tema secundario de su pregunta original, sugeriría algunos cambios en el cuerpo del disparador:

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

Los cambios:

  • Referencia NEW.ID en lugar de Delivery.ID .
  • Utilice SQL-92 JOIN sintaxis en lugar de SQL-89 "estilo de coma" se une.
  • Usar UPDATE de varias tablas con uniones, en lugar de EXISTS con subconsulta correlacionada.
  • Utilice comillas simples para cadenas en lugar de comillas dobles.
  • Termina la UPDATE declaración con un punto y coma.