Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro de sintaxe no gatilho MYSQL


Para que seu cliente MySQL não interprete o ; que encerra o INSERT instrução como o final do CREATE TRIGGER declaração, você deve informar que deseja usar algum outro delimitador de declaração.

No mysql cliente de linha de comando, você pode fazer isso com o DELIMITER comando . Por exemplo, para alterar seu delimitador de instrução para um ponto-e-vírgula duplo:
DELIMITER ;;

Então você pode fazer:
CREATE TRIGGER LOG_UPDATE BEFORE UPDATE ON WORKLOG FOR EACH ROW BEGIN
  INSERT INTO WORKLOG_BACKUP VALUES (
    NULL,
    CURRENT_TIMESTAMP,
    NEW.LOGNO,
    NEW.JOBNO,
    NEW.EMPLOYEENO,
    NEW.WORKDATE,
    NEW.WORKTIME,
    'UPDATE'
  );
END;;

No entanto, como nesse caso seu gatilho contém apenas uma instrução, você não precisa usar um BEGIN ... END bloco de instruções compostas e poderia, portanto, evitar alterar os delimitadores completamente:
CREATE TRIGGER LOG_UPDATE BEFORE UPDATE ON WORKLOG FOR EACH ROW
  INSERT INTO WORKLOG_BACKUP VALUES (
    NULL,
    CURRENT_TIMESTAMP,
    NEW.LOGNO,
    NEW.JOBNO,
    NEW.EMPLOYEENO,
    NEW.WORKDATE,
    NEW.WORKTIME,
    'UPDATE'
  )
;