2009-07-09 19 views
14

Esta secuencia de comandos MySQL instala múltiples activadores.MySQL DELIMITER errores de sintaxis

Funciona en una máquina que ejecuta MySQL 5.0.51b-community. En otra máquina que ejecuta MySQL 14.12 Distrib 5.0.45, para redhat-linux-gnu (i386) falla, con este mensaje de error, que parece estar relacionado con DELIMITER // ... // DELIMITER; sintaxis:

ERROR 1064 (42000) en la línea 272: Tiene un error en la sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'DELIMITER; DROP TRIGGER SI EXISTE trigger_name; DELIMITER' at line 1

La sintaxis de la escritura (resumido) es:

DROP TRIGGER IF EXISTS trigger_name; 
DELIMITER // 
CREATE TRIGGER trigger_name BEFORE UPDATE ON table 
FOR EACH ROW BEGIN 
    -- Trigger logic goes here 
END // 
DELIMITER; 

-- More trigger drop/create statements follow 

¿Qué hay de malo en el guión, y cómo puedo corregirlo?

Respuesta

22

Trate

DELIMITER ; 

no

DELIMITER; 

en realidad estás especificando ; como un argumento para el comando DELIMITER, así que no tener el espacio no puede ser confundiéndolo.

+0

no me daba cuenta de que, gracias por explicar :) – Sophia

4

Necesita un espacio entre 'DELIMITER' y ';'

DELIMITER ; 
# not: 
DELIMITER; 
0

Hmm Tengo problemas similares. Hago un mysqldump de Debian Lenny ejecutando 5.0.51 e intento importar a OpenSolaris corriendo 5.0 y obtengo el mismo error. Y tengo DELIMITER;

¿Conflicto con la versión?

+0

parecía estar relacionada con versiones para nosotros, una versión trabajó sin punto y coma, otra trabajaron con sólo un punto y coma, y ​​otro requiere un punto y coma y sin espacio. – Sophia

2

Así como un add-on, para otra persona:

Se requiere que el delimitador para permitir que toda la definición que se pasa al servidor como una sola instrucción.

0

Pruebe el siguiente.

Estoy seguro de que debería resolver el propósito.

DELIMITER + 
CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
FOR EACH ROW BEGIN 
INSERT INTO STUDENT_AUDIT 
SET STUDENT_ID = NEW.STUDENT_ID, 
MAC_ADDRESS = NEW.MAC_ADDRESS, 
IPADDRESS = NEW.IPADDRESS, 
EMAIL_ID = NEW.EMAIL_ID , 
START_TIME=NEW.START_TIME, 
END_TIME=NEW.END_TIME, 
STATUS=NEW.STATUS; 
END; + 

De lo anterior cuando usamos un DELIMITER. Debe ser en forma de

DELIMITER + 
-- 
BLOCK OF SQL WHATEVER YOU WANT TO MENTION 
-- 
+ 
1

En la versión de MySQL utilizo el mismo error se produce cuando se utiliza el comando delimitador, pero esta versión se encarga del delimitador ";" para declaraciones y delimitador "|" para procedimientos almacenados y funciones, que creo que resuelve el problema; intente esto:

DROP TRIGGER IF EXISTS trigger_name;

CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |

-- other statements or functions here

+0

¿Qué versión sería esa? –

Cuestiones relacionadas