Use MySql function variables as table name in the query
I need to have a function that increments the certain ID in a table (like auto_increment)
I have smth like this
DELIMITER $$ DROP FUNCTION IF EXISTS `GetNextID`$$ CREATE FUNCTION `GetNextID`(tblName TEXT, increment INT) RETURNS INT DETERMINISTIC BEGIN DECLARE NextID INT; SELECT MAX(concat(tblName, 'ID')) + increment INTO NextID FROM concat('table_', tblName); ## SELECT MAX(articleID) + increment INTO NextID FROM table_article; RETURN NextID; END$$ DELIMITER ; INSERT INTO `table_article` ( articleID, articleAlias ) VALUES ( GetNextID('article', 5)开发者_运维百科, 'TEST' );
So i pass two variables: tblName (without table_
prefix), and the increment number. The commented line - SELECT query inside the function itself - works well, but i want to dynamically pass table name to the function and so get data from a certain col of certain table. What am I doing wrong?
The error is:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('table_', tblName); RETURN NextID; END' at line 6
if i simply try to select max value in such a way
SELECT MAX(articleID) + increment INTO NextID FROM tblName;
The error reports that tblName does not exist. How can i tell MySql that this is actually a var passed to the function, not an exact table name? If it is possible.
you need something like
prepare stmp from concat('SELECT MAX(ID) + ', increment, ' INTO NextID FROM table_', tblName);
execute stmp;
deallocate prepare stmp;
精彩评论