2016-04-25 97 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