Mysql 选择内部存储的进程不';它不能正常工作,而在外面却能正常工作

Mysql 选择内部存储的进程不';它不能正常工作,而在外面却能正常工作,mysql,stored-procedures,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', 'BLU

我在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
所以当我调用following时,我看到了不同的结果

select * from mediavend.itemdetails where itemType='MUSIC';
--返回2行

call mediavend.info_ItemType('MUSIC');
--返回6行

call mediavend.info_ItemType('MUSIC');

我真的很困惑,如果这是一个愚蠢的错误,请原谅,但我已经回答了很多问题,没有发现与此相关的任何问题。

重命名您的输入参数,因为它与列同名

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

MySQL不区分大小写,因此当您说
where ITEMTYPE=ITEMTYPE
时,您要查找的是列与自身相等的位置,因此返回所有行


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

哇,区分大小写!我永远不会忘记mysql。非常感谢。