我正在尝试执行以下准备好的声明:
PREPARE stmt FROM 'SELECT * FROM Inventory I WHERE I.ParentId = ?';
EXECUTE stmt USING @parentId;
DEALLOCATE PREPARE stmt;
当我执行此语句时,它返回没有行的列标题。它应该返回6行。
如果我在没有PREPARE和EXECUTE语句的情况下执行与普通SQL语句相同的语句,我会得到结果,例如
SELECT * FROM Inventory I WHERE I.ParentId = parentId;
返回结果。我究竟做错了什么?是否有某种铸造正在使我的声明无效?
更新,parentId作为参数传入,例如
CREATE DEFINER=`george`@`%` PROCEDURE `ListInventoryByParentId`(IN parentId INT)
答案 0 :(得分:1)
用户变量@parentId和过程参数parentID是独立的。 在执行语句之前,需要将用户变量设置为procedure参数。
SET @parentID = parentId;