MySQL中的嵌套if语句

问题描述:

我正在制作一个插入地点(“Sted”)的过程,我想检查输入是否为NULL。但是,每当我尝试在开始时添加一个if语句来包围我的代码(下面标记为“CRASH”)时,它会给我一个错误,说我的语法在“DECLARE varStedskodeID INT;”处不正确。这是我试图添加的IF语句之后的部分。MySQL中的嵌套if语句

在我眼中,我的if语句的语法在代码中是相同的,但是只有我即将进行的NULL检查if语句甚至只是简单的IF(TRUE)就会崩溃。

任何人都可以给我一个什么原因导致这一个,如果崩溃的提示?

DROP PROCEDURE IF EXISTS InsertSted; 
DELIMITER $$ 
CREATE PROCEDURE InsertSted(
    IN inputStedsnavn VARCHAR(255), 
    IN inputStedstype VARCHAR(255), 
    IN inputKommunenavn VARCHAR(255)) 
BEGIN 
    IF(TRUE) THEN <<------ CRASH 

     DECLARE varStedskodeID INT; 
     DECLARE varKommunenr INT; 

     IF(SELECT COUNT(StedkodeID) FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1) = 0 THEN 
      INSERT INTO stedstype VALUES(DEFAULT, inputStedstype); 
     END IF; 
     SET varStedskodeID = (SELECT StedkodeID FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1); 

     IF(SELECT COUNT(Kommunenr) FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1) = 1 THEN 
      SET varKommunenr = (SELECT Kommunenr FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1); 
      INSERT INTO sted VALUES(DEFAULT, inputStedsnavn, varStedskodeID, varKommunenr); 
     END IF; 

    END IF; <<------ CRASH 
END$$ 
DELIMITER ; 
+0

首先尝试'declare'变量然后执行结果 – 2014-10-17 09:53:18

DECLARE只允许在BEGIN ... END复合语句 并且必须在它的开始,任何其他语句之前。

http://dev.mysql.com/doc/refman/5.0/en/declare.html

的MySQL遵循严格的规则DECLARE。您必须在存储过程开始时为DECLARE变量,表格等。

更改存储过程是这样

DECLARE varStedskodeID INT; 
DECLARE varKommunenr INT; 
IF(TRUE) THEN 

     IF(SELECT COUNT(StedkodeID) FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1) = 0 THEN 
      INSERT INTO stedstype VALUES(DEFAULT, inputStedstype); 
     END IF; 
     SET varStedskodeID = (SELECT StedkodeID FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1); 

     IF(SELECT COUNT(Kommunenr) FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1) = 1 THEN 
      SET varKommunenr = (SELECT Kommunenr FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1); 
      INSERT INTO sted VALUES(DEFAULT, inputStedsnavn, varStedskodeID, varKommunenr); 
     END IF; 

END IF;