2016-04-25 126 views
0

請幫我理解, 我需要將創建新用戶的存儲過程寫入db。mysql select into返回NULL

delimiter //  
    CREATE PROCEDURE add_user (x VARCHAR(25)) 
    BEGIN 
     DECLARE x VARCHAR(25) DEFAULT 'mark'; 
     DECLARE newname VARCHAR(25); 
     DECLARE xid INT; 

     SELECT x, id INTO newname, xid 
     FROM users WHERE x = x; 
     SELECT newname; 
    END; 
    delimiter ; 

當我call add_user('peter'); 它讓我看到: newname/null 不要我去哪裏錯了?

+0

'WHERE xname = xname'? – axiac

+0

我的不好,不好意思,把'xname改爲x' – 100vla

回答

1
CREATE PROCEDURE add_user (x VARCHAR(25)) 
BEGIN 
    DECLARE x VARCHAR(25) DEFAULT 'mark'; 

這實際上創建變量命名x。第一個是函數參數,第二個是位於BEGIN ... END塊內的局部變量。根據MySQL的scoping rules,這些變量中只有一個可見,這意味着參數xBEGIN ... END塊內隱藏且無法訪問。

解決方法是要刪除的行

DECLARE x VARCHAR(25) DEFAULT 'mark'; 

,如果你需要指定一個默認值,這樣做在一個IF塊:

IF x IS NULL THEN 
    SET x = 'mark'; 
END IF; 

函數完整的定義應該是

delimiter //  
CREATE PROCEDURE add_user (x VARCHAR(25)) 
BEGIN 
    DECLARE newname VARCHAR(25); 
    DECLARE xid INT; 

    IF x IS NULL THEN 
    SET x = 'mark'; 
    END IF; 

    SELECT x, id INTO newname, xid 
    FROM users WHERE x = x; 
    SELECT newname; 
END; 
delimiter ; 
+0

謝謝@Darwin von Corax,真的,謝謝! – 100vla