存储过程中的SELECT无法正常工作,而在它之外

时间:2013-05-13 17:10:46

标签: mysql stored-procedures

我在mysql中有一个简单的数据库:

DROP TABLE IF EXISTS MEDIAVEND.ITEMDETAILS;
CREATE TABLE IF NOT EXISTS MEDIAVEND.ITEMDETAILS (
    ItemID BIGINT UNSIGNED NOT NULL,
    ITEMTYPE ENUM('MUSIC', 'MOVIE', 'GAME') NOT NULL,
    ITEMMEDIATYPE ENUM('CD', 'DVD', 'BLURAY') NOT NULL,
    ITEMNAME CHAR(100) NOT NULL,
    ITEMDESCRIPTION CHAR(200) NOT NULL,
    ITEMCOUNT BIGINT NOT NULL,
    MACHINEID BIGINT NOT NULL,
    PRIMARY KEY (ITEMID)
);

INSERT INTO MEDIAVEND.ITEMDETAILS VALUES 
    (1,'MUSIC','CD','ALBUM 1','SOME DESCRIPTION OF 1',100,1),
    (2,'MUSIC','CD','ALBUM 2','SOME DESCRIPTION OF 2',20,1),
    (3,'MOVIE','DVD','MOVIE 1','SOME DESCRIPTION OF 1',30,1),
    (4,'MOVIE','BLURAY','MOVIE 2','SOME DESCRIPTION OF 2',40,1),
    (5,'GAME','DVD','GAME 1','SOME DESCRIPTION OF 1',50,1),
    (6,'GAME','BLURAY','GAME 2','SOME DESCRIPTION OF 2',60,1);

和存储过程如下:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `info_ItemType`(in itemType char(10))
BEGIN
SELECT * FROM MEDIAVEND.ITEMDETAILS WHERE ITEMTYPE= itemType;
END

所以当我打电话跟随时,我会看到不同的结果。

select * from mediavend.itemdetails where itemType='MUSIC';

- 返回2行

call mediavend.info_ItemType('MUSIC');

- 返回6行

我真的很困惑,请原谅我,如果这是一个愚蠢的错误,但我已经经历了很多问题,并且没有看到任何相关的问题。

2 个答案:

答案 0 :(得分:1)

重命名输入参数,因为它与列名称相同。

DELIMITER $$    
CREATE DEFINER=`root`@`localhost` PROCEDURE `info_ItemType`(in itemType_Param char(10))
BEGIN
    SELECT * FROM MEDIAVEND.ITEMDETAILS 
    WHERE ITEMTYPE = itemType_Param;
END
$$

答案 1 :(得分:1)

MySQL不区分大小写,所以当你说where ITEMTYPE = itemType时,你正在寻找列等于它自己的位置,因此返回所有行。

您需要使用唯一的参数名称。