开发者

Use MySql function variables as table name in the query

开发者 https://www.devze.com 2023-02-24 10:08 出处:网络
I need to have a function that increments the certain ID in a table (like auto_increment) I have smth like this

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;
0

精彩评论

暂无评论...
验证码 换一张
取 消