1

I am studying for the mysql certification and the way i learn is by doing, I failed it before by one question and if i had of paid more attention to stored procs i would have gotten it. any i am making up some funky scenarios that i would actually use so here is one that i am stumped on.

    /*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;

I keep getting back null values can anyone tell me why??

4

2 に答える 2

1

まず、テーブル定義は正しいですか? idテーブルで名前が付けられた列が必要なようです。

name2 番目: テーブルからとの列を選択していますが、out パラメータにemail値を割り当てていません(このような混同を避けるために、パラメータの名前を別の名前に変更する必要があるかもしれません) 。これは自動的には行われません。どの列を選択するかをステートメントに明示的に伝えることと、結果を変数に代入することの間には大きな違いがあります。nameemailoutnameoutemailSELECT

そのため、ストアド プロシージャは実際には結果セットを返しますがnull、値を割り当てない限り、2 つの出力パラメーターは常に結果セットになります。

于 2013-10-17T11:36:42.527 に答える