2009-07-17 10 views
8

Ich arbeite mit Mysql 5.1.28-rc auf freebsd. Ich habe beschlossen, nur gespeicherte Prozeduren in MYSQL zu verwenden und ein Testverfahren erstellt wie folgt:MYSQL Stored Procedures Wenn Anweisung Problem

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test $$ 
CREATE PROCEDURE test(IN test VARCHAR(22)) 
BEGIN 
DECLARE count INT(11); 
SET count = (SELECT COUNT(*) FROM Test WHERE test_column = test); 
SELECT count; 
IF count = 0 THEN 
    SET count = 1; 
ELSE 
    SET count = 2; 
ENDIF; 
END $$ 
DELIMITER; 

Dieses Verfahren funktioniert gut ohne IF-Anweisung in ihm, aber mit der if-Anweisung gibt es, ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; END'

Wie kann ich dieses Problem lösen? Wo ist das Problem?

Antwort

20

ENDIF erfordert einen Platz in MySQL, nicht wahr? das heißt END IF

+2

heilige Kuh finden, wie kann ich vermisse, dass :) – systemsfault

+3

ist es nahezu unmöglich Tippfehler in Ihrem eigenen Code zu erkennen, keine Sorge. Lassen Sie es für die Paarprogrammierung hören oder, wenn Sie das nicht können, SO ...: D –

5

brauchen nur Raum in end if in der gespeicherten Prozedur

+0

Können Sie Ihre Antwort rechtfertigen? Z.B. mit einem Link zur Dokumentation? – Tim

+0

Begründung? Mona hat die obige Antwort einfach kopiert – Tivie

0

Sollte verwenden Variablen wie Graf oder etwas nicht. Also bitte die Lösung für this-

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test $$ 
CREATE PROCEDURE test(IN test VARCHAR(22)) 
BEGIN 
DECLARE var_count INT; 
SET var_count = (SELECT COUNT(*) FROM test WHERE test.textfield = test); 
IF var_count = 0 THEN 
    SET var_count = 1; 
ELSE SET var_count = 2; 
END IF; 
SELECT var_count; 
END $$ 
Verwandte Themen