phpMyAdmin
 sql >> Base de Dados >  >> Database Tools >> phpMyAdmin

Não é possível criar um TRIGGER de dentro de outra rotina armazenada -- O que é outra rotina armazenada?


O gatilho que você mostra acima está bom.

editar: Quando você cria um gatilho na GUI do phpMyAdmin, você só precisa inserir o corpo do gatilho na Definição painel, ou seja, a parte BEGIN...END .

Isso ocorre porque o phpMyAdmin tentará ser inteligente e escrever o cabeçalho do gatilho para você com base nos outros elementos que você inserir (nome, tabela, hora, evento).

Aqui está a maneira correta de definir um gatilho no phpMyAdmin:



Se você escrever o CREATE TRIGGER... cabeçalho dentro do corpo, ele confundirá o MySQL porque verá CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Isso faz o MySQL pensar que você está definindo um gatilho cuja primeira instrução é CREATE TRIGGER .

Como um problema secundário da sua pergunta original, sugiro algumas alterações no corpo do gatilho:
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

As mudanças:
  • Referência NEW.ID em vez de Delivery.ID .
  • Usar SQL-92 JOIN sintaxe em vez de junções de "estilo de vírgula" SQL-89.
  • Usar UPDATE de várias tabelas com junções, em vez de EXISTS com subconsulta correlacionada.
  • Use aspas simples para strings em vez de aspas duplas.
  • Encerrar a UPDATE instrução com ponto e vírgula.