我刚刚创建了一个类似的存储过程:
delimiter $$
CREATE PROCEDURE GetSmth(IN f1 INT UNSIGNED, IN f2 VARCHAR(6))
BEGIN
SELECT
`ID`
FROM
`table`
WHERE
`f1`=f1
AND
`f2`=f2 COLLATE utf8_unicode_ci
AND
`f3` IS NULL
ORDER BY `ID` DESC
LIMIT 0, 1
END $$
这是表格中的数据:
ID | f1 | f2 | f3
1 | 1 | 123456 | NULL
2 | 1 | 555666 | 1
无论我拨打什么电话:CALL GetSmth(3, '123456')
,CALL GetSmth(1, '000000')
或我仍然获得2
作为我桌上的最后ID
。其他存储过程工作正常。我无法弄清楚那个是什么问题。当我在没有程序的情况下调用此SELECT
语句时,它正在运行。例如,如果我将3
作为f1
值传递,我将无法获得任何结果。但在程序中它将返回2
。我的定义器没问题(就像在其他程序中一样)并且SQL Data Access
设置为CONTAINS SQL
- 就像在其他程序中一样。
关于表的几句话:InnoDB,ID
- INT UNSIGNED AI NOT NULL
,f1
和f2
是索引INDEX
(用作另一个表的外键)。这个表就像任何其他表一样。
答案 0 :(得分:1)
使用与要使用的查询中的字段名称相同的参数名称通常不是一个好主意。尝试将参数重命名为p_f1
和p_f2
。