1

我正在学习 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;

我不断返回空值,谁能告诉我为什么?

4

2 回答 2

1

首先,你确定你的表定义是正确的吗?您似乎必须在表中命名列id

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

null因此,虽然存储过程实际上返回了一个结果集,但除非您为它们分配值,否则这两个输出参数将始终存在。

于 2013-10-17T11:36:42.527 回答
0

改变你的: SELECT name, emailFROM membersWHERE id= idnum; 到 SELECT name, emailINTO PARAMETER_NAME, PARAMETER_EMAIL FROM membersWHERE id= idnum;

尝试使用另一个参数名称,例如 P_NAME、P_EMAIL e 设置如下:

SELECT name, emailINTO P_NAME, P_EMAIL FROM membersWHERE id= P_IDNUM;

于 2015-01-05T18:39:53.797 回答