问题描述
|
我正在尝试执行以下准备的语句:
PREPARE stmt FROM \'SELECT * FROM Inventory I WHERE I.ParentId = ?\';
EXECUTE stmt USING @parentId;
DEALLOCATE PREPARE stmt;
当我执行此语句时,它返回没有行的列标题。它应该返回6行。
如果我执行与普通SQL语句相同的语句而没有PREPARE和EXECUTE语句,则会得到结果,例如
SELECT * FROM Inventory I WHERE I.ParentId = parentId;
返回结果。我究竟做错了什么?是否正在进行某种类型的强制转换,使我的陈述无效?
更新时,parentId作为参数传入,例如
CREATE DEFINER=`george`@`%` PROCEDURE `ListInventoryByParentId`(IN parentId INT)
解决方法
用户变量@parentId和过程参数parentID是独立的。
在执行语句之前,需要将用户变量设置为过程参数。
SET @parentID = parentId;