1

私は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 行が返されました

私は本当に困惑しています。それがばかげた間違いであれば許してください。

4

2 に答える 2

1

列と同じ名前であるため、入力パラメーターの名前を変更します。

DELIMITER $$    
CREATE DEFINER=`root`@`localhost` PROCEDURE `info_ItemType`(in itemType_Param char(10))
BEGIN
    SELECT * FROM MEDIAVEND.ITEMDETAILS 
    WHERE ITEMTYPE = itemType_Param;
END
$$
于 2013-05-13T17:16:39.953 に答える
1

MySQL は大文字と小文字を区別しないため、 と言うとwhere ITEMTYPE = itemType、列がそれ自体と等しい場所を探しているため、すべての行が返されます。

一意のパラメーター名を使用する必要があります。

于 2013-05-13T17:17:17.293 に答える