2017-07-14 2 views
0

Ich versuche, eine gespeicherte Prozedur auf MySQL Workbench Version 6.3 zu erstellen.
Ich bekomme eine Warnung, dass in Zeile 3 meines Verfahrens Code ein Semikolon fehlt, aber es ist da.Warum sagt MySQL Workbench mir, dass Semikolon fehlt?

Dies ist die Antwort, die ich erhalten:

Fehlercode: 1064. Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie die Handbuch, das für die richtige Syntax zu Ihrem MySQL-Server-Version entspricht in der Nähe zu verwenden ‚‘ in Zeile 3

Was ist geschehen?

CREATE PROCEDURE MigrateDescription() 
BEGIN 
    DECLARE counter int; 
    DECLARE abhid varchar(20); 
    DECLARE text_d varchar(50); 
    DECLARE text_e varchar(50); 
    DECLARE curs CURSOR FOR SELECT `abhaengigkeit`.`AbhId`, `abhaengigkeit`.`Text_D`, `abhaengigkeit`.`Text_E` FROM `p16altdatentest`.`abhaengigkeit`; 
    OPEN curs; 

    REPEAT 
     FETCH curs INTO abhid, text_d, text_e; 

     INSERT INTO `paragraph16`.`description` 
      (`languageId`,`textKey`,`text`,`isDeleted`,`changedBy`,`changeDate`) 
      VALUES 
      (1, CONCAT('Dependancy_', REPLACE(abhid, '_', '')), text_d, 0, NULL, CURRENT_TIMESTAMP); 
     INSERT INTO `paragraph16`.`description` 
      (`languageId`,`textKey`,`text`,`isDeleted`,`changedBy`,`changeDate`) 
      VALUES 
      (2, CONCAT('Dependancy_', REPLACE(abhid, '_', '')), text_e, 0, NULL, CURRENT_TIMESTAMP); 
    END REPEAT 
END 
+0

Try 'ERKLÄREN Zähler int (11);' – EvgenyKolyakov

+0

Hat der MySQL-Server Bericht ein Fehler, wenn Sie den Code ausführen? – axiac

+0

** _ @ OP _ **: Sie besser schreiben die _exact Fehler-Stack thrown_ in WB –

Antwort

2

Die MySQL Workbench sendet den Code unverändert an den Server.

MySQL verwendet ; als Trennzeichen für die Anweisung. Wenn es in Zeile 3 auf ; stößt, denkt es, dass die Anweisung, die mit CREATE PROCEDURE begann, endet, und es folgen viele andere Anweisungen. Die ersten drei Zeilen des von Ihnen geposteten Codes sind definitiv keine gültige CREATE PROCEDURE-Anweisung. zu einem anderen Zeichen oder eine Folge von Zeichen

Wie erläuterte in den documentation, um Trennzeichen, die Aussagen ; innerhalb des Körpers eines BEGIN..END compound statement Erforderliches temporärer Änderung zu verwenden.

Der Befehl zum Ändern des Anweisungstrennzeichens lautet DELIMITER, gefolgt vom neuen zu verwendenden Trennzeichen. Es muss nicht mit dem aktuellen Trennzeichen beendet werden. es ist genug, um es allein auf der Linie zu haben.

Schliessen Sie Ihren Code in zwei Anrufe DELIMITER (einen neuen zu setzen und dann ; als Trennzeichen zur Wiederherstellung):

DELIMITER // 
CREATE PROCEDURE MigrateDescription() 
BEGIN 
    -- The content of your procedure here, using ; as statement delimiter 
END 
//    -- This is where the CREATE PROCEDURE statement ends 
DELIMITER ; -- Restore the default delimiter 

Dies ist die Standard-MySQL-Weg-Routinen, Trigger und andere Anweisungen zu erstellen, enthalten compound statements. Es wird nicht benötigt, wenn die Routine oder der Trigger-Body nur eine Anweisung enthält (keine ; innen).

Verwandte Themen