【发布时间】:2015-12-16 20:27:51
【问题描述】:
我刚刚创建了一个这样的存储过程:
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(用作另一个表的外键)。此表与任何其他表一样。
【问题讨论】:
-
您确定程序代码是您认为的那样吗?尝试
SHOW CREATE PROCEDURE GetSmth并检查。