gpt4 book ai didi

Mysql - 获取下一个自动增量的过程

转载 作者:行者123 更新时间:2023-11-29 12:58:14 24 4
gpt4 key购买 nike

我在编写存储过程来获取自动增量列的下一个值时遇到一些问题。我希望能够传递表名并将值返回到指定的变量。

流程如下:

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;

似乎我忘记了程序本身的某些内容,但我看不到它?

最佳答案

我自己尝试了一下,效果很好。

set @tabname = 'tab';

SELECT AUTO_INCREMENT
INTO @incre
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @tabname
LIMIT 1;

select @incre;

还值得一提的是,使用上面的查询,您将获得下一个( future )auto_increment 值(只不过是当前值 + 1)。

编辑:

终于明白了;问题出在您的查询中的LIMIT 1。尝试下面的代码,它保证可以正常工作(已测试)。另外,不要使用任何保留字作为变量名。

DELIMITER $$
CREATE PROCEDURE Find_last_AI(IN tname VARCHAR(255), OUT last_AI INT)
BEGIN
SELECT AUTO_INCREMENT
INTO last_AI
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test'
AND TABLE_NAME = tname;
END$$
DELIMITER ;

运行程序,如

CALL Find_last_AI('test3', @last_AI);    
SELECT @last_AI;

关于Mysql - 获取下一个自动增量的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com