0

我正在製作一個插入地點(「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

回答

0

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;