2014-01-30 41 views
10

我想創建和設置一個變量:在MySQL Workbench中聲明變量語法無效?

DECLARE myId INT; 
SET myId = 5; 

但是,我得到的語法無效投訴MySQL工作臺:

SQL語法錯誤附近「聲明身份識別碼INT;」

我曾嘗試以下的變體:

DECLARE myId INT(4); 
SET myId = 5; 

DECLARE @myId INT; 
SET @myId = 5; 

DECLARE @myId INT(4); 
SET @myId = 5; 

有什麼不對?

+6

'DECLARE'只在已存儲的程序中有效,_ _「DECLARE僅在BEGIN ... END複合語句中被允許_」。 – Wrikken

回答

4

正如在註釋中說的,Declare只對程序,函數等存儲程序有效。 這裏您有一個存儲過程及其調用的示例。

DELIMITER $$ 

CREATE PROCEDURE sp1 (x VARCHAR(5)) 
BEGIN 
    DECLARE xname VARCHAR(5) DEFAULT 'bob'; 
    DECLARE myId INT; 


    SET myId = 5; 
    SELECT CONCAT(xname,' -- ',myId); 
END; 
$$ 

DELIMITER ; 

call sp1('MY NAME'); 
+0

確保你最後放棄了這個過程,否則mysql工作臺會抱怨它已經存在。 'DROP PROCEDURE sp1;' – Whitecat

1

我遇到了同樣的問題。變量必須在腳本的開頭聲明。

DELIMITER && 

DROP PROCEDURE IF EXISTS PS_HANDLERS; 

CREATE PROCEDURE PS_HANDLERS(IN ID_USER INT, OUT isError INT) 
    BEGIN 
     DECLARE USER_EMAIL VARCHAR(50); 
     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
      BEGIN 
       SET IsError = 1; 
      END; 

     SET USER_EMAIL = CONCAT(RAND(),'@',RAND(),'.com'); 
     SET isError = 0; 



     INSERT INTO tbl_user VALUES(ID_USER, 'ipsum','lorem','[email protected]','password','ROLE_USER'); 

     SELECT 
      u.* 
     FROM 
      tbl_user u; 
    END && 

DELIMITER ;