2013-10-17 36 views
1

我正在爲mysql認證學習,並且我學習的方式是通過做,我之前通過一個問題失敗了,如果我有更多的關注存儲過程我會得到它。任何我正在編造一些時髦的場景,我實際上會使用,所以這裏是我難以理解的場景。當我調用2 OUT參數時,MySQL存儲過程返回NULL值 - 請參閱代碼

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

我總是找回空值誰能告訴我爲什麼?

回答

1

首先,你確定你的表格定義是正確的嗎?您似乎必須在表中名爲id的列。

二:你選擇從表中nameemail列,但你不out參數nameemail(也許你應該重新命名的參數別的東西來避免這種mixups,像分配值outnameoutemail)。這不是自動完成的。告訴SELECT聲明明確指定選擇哪些列並將結果分配給變量有很大的區別。

因此,雖然存儲過程實際上返回結果集,但兩個輸出參數將始終爲null,除非您爲其分配值。

+0

嗨,對不起,我實際上刪除了第二個ID時,我創建了我測試的表,這是一個錯誤。我仍然迷失。我已經將out參數重命名爲OUT'outname' VARCHAR(255), OUT'outemail' VARCHAR(255),我試圖使用以下調用select_user(20,'@outname','@outemail' ); SELECT'@outname','@outemail';但仍然null null – user2610856

+0

像Thorsten說,分配值給你的變量。做'SELECT name,email INTO outname,outemail FROM ...'(如果我記得語法正確)。 – fancyPants

0

改變你的: 選擇nameemail FROM members WHERE id = idnum; 至 選擇name,email INTO PARAMETER_NAME,PARAMETER_EMAIL從members WHERE id = idnum;

嘗試使用其他放慢參數名稱等P_NAME,P_EMAIL E設置這樣的:

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