当我调用2 OUT参数时,MySQL Stored Proc返回NULL值 - 参见代码

时间:2013-10-17 11:33:07

标签: mysql sql stored-procedures mysqlimport

我正在学习mysql认证和我学习的方式是通过做,我之前通过一个问题失败了,如果我更加关注存储过程我会得到它。任何我正在制作一些我实际会使用的时髦场景,所以这里是我难以接受的。

    /*TABLE STRUCTURE */
    CREATE TABLE `members` (
      `id` mediumint(8) unsigned NOT NULL auto_increment,
      `name` varchar(255) default NULL,
      `email` varchar(255) default NULL,
      PRIMARY KEY (`id`)
    );


    /* PROCEDURE STRUCTURE */
    USE WOL_STATISTICS;

    DELIMITER $$

    CREATE PROCEDURE `select_user`
    (
    IN `idnum` INT(11),
    OUT `name` VARCHAR(255),
    OUT `email` VARCHAR(255)
    )

    SQL SECURITY DEFINER
    LANGUAGE SQL
    NOT DETERMINISTIC


    BEGIN
    SELECT `name`, `email` FROM `members` WHERE `id` = `idnum`;
    END $$

    DELIMITER ;


    /* CALL STATEMENT */

    CALL select_user(20, @name, @email);
        SELECT @name, @email;

我一直回到空值,任何人都可以告诉我为什么?

2 个答案:

答案 0 :(得分:1)

首先,您确定您的表定义是否正确?您似乎需要在表格中使用名为id的列。

第二:您正在从表格中选择nameemail列,但您没有将值分配给out参数nameemail(也许您应该将参数重命名为其他内容以避免此类混淆,例如outnameoutemail)。这不是自动完成的。告诉SELECT语句明确指出要选择哪些列并将结果分配给变量之间存在巨大差异。

因此,当存储过程实际返回结果集时,除非您为它们指定值,否则两个输出参数将始终为null

答案 1 :(得分:0)

改变你的意见: 选择nameemail FROM members WHERE id = idnum; 至 选择nameemail INTO PARAMETER_NAME,PARAMETER_EMAIL来自members WHERE id = idnum;

尝试使用其他参数名称,如P_NAME,P_EMAIL e设置如下:

SELECT nameemail INTO P_NAME,P_EMAIL FROM members WHERE id = P_IDNUM;