2009-07-09 16 views
14

Questo script MySQL installa più trigger.Errori di sintassi MySQL DELIMITER

Funziona su una macchina che esegue MySQL 5.0.51b-community. Su un'altra macchina che esegue MySQL 14.12 Distrib 5.0.45, per redhat-linux-gnu (i386) fallisce, con questo messaggio di errore, che sembra essere correlato allo DELIMITER // ... // DELIMITER; sintassi:

ERRORE 1064 (42000) alla riga 272: si è verificato un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a 'DELIMITER; DROP TRIGGER IF EXISTS trigger_name; DELIMITER' at line 1

La sintassi dello script (riassunto) è:

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 

Cosa c'è di sbagliato con lo script, e come posso correggerlo?

risposta

22

Prova

DELIMITER ; 

non

DELIMITER; 

si sta effettivamente specificando ; come argomento al comando DELIMITER, in modo da non avere lo spazio ci può essere confusione di esso.

+0

non mi rendevo conto che, grazie per spiegare :) – Sophia

4

È necessario uno spazio tra "DELIMITER" e ";"

DELIMITER ; 
# not: 
DELIMITER; 
0

Hmm Sto avendo problemi simili. Faccio un mysqldump da Debian Lenny con 5.0.51 e provo a importare su OpenSolaris con 5.0 e ottengo lo stesso errore. E ho DELIMITER;

Conflitto di versione?

+0

sembrava essere correlato a versioni per noi, una versione lavorato con nessun punto e virgola, un altro ha lavorato con solo un punto e virgola, e un altro richiesto un punto e virgola e nessuno spazio – Sophia

2

Proprio come un add-on, per qualcun altro:

Il delimitatore è necessario per consentire l'intera definizione per essere passato al server come una singola istruzione.

0

Prova il seguente.

Sono sicuro che dovrebbe risolvere lo scopo.

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; + 

Da quanto sopra quando si utilizza DELIMITER. Dovrebbe essere in forma di

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

Nella versione di MySql io uso lo stesso errore si verifica quando si utilizza il comando delimitatore, ma questa versione gestisce il delimitatore ";" per dichiarazioni e delimitatori "|" per stored procedure e funzioni, che penso risolva il problema; provare questo:

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

Quale versione sarebbe? –

Problemi correlati