【发布时间】:2014-07-06 04:24:34
【问题描述】:
我在编写存储过程以获取 Auto Incremented 列的下一个值时遇到了一些问题。我希望能够传递一个表名并将值返回给指定的变量。
程序如下:
CREATE PROCEDURE Find_last_AI(
IN table_name VARCHAR(255),
OUT last_AI INT)
BEGIN
SELECT AUTO_INCREMENT
INTO last_AI
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'MySchema'
AND TABLE_NAME = table_name
LIMIT 1;
END;
问题是,在我这样调用函数之后:
CALL Find_last_AI('MyTable', @out);
SELECT @out;
无论表格输入是什么,我都会得到相同的错误结果 - 数值 (5)。问题是,当我将代码作为查询执行时,结果会产生正确的值。
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'MySchema'
AND TABLE_NAME = 'table_name'
LIMIT 1;
我好像忘记了程序本身的某些内容,但我看不到?
【问题讨论】:
-
你在列名周围使用
",你真的得到了正确的结果吗?真不敢相信。 -
为什么,为什么,为什么?哦,人类。
-
抱歉,服务器启用了 ANSI_QUOTES。编辑了“无论如何,不会改变任何东西。
标签: mysql stored-procedures auto-increment