MySQL:如何创建一个查询变量列名称的函数

时间:2020-11-02 09:35:41

标签: mysql sql stored-procedures dynamic-sql sql-function

我正在尝试让函数女巫从任何以参数表示的表中创建新ID。

DROP FUNCTION IF EXISTS create_id;
DELIMITER $$
CREATE FUNCTION create_id(db_table TEXT,pkey TEXT,strlen INT,joinner TEXT)
  RETURNS TEXT
BEGIN
    DECLARE max_id TEXT;
    DECLARE new_id TEXT;
    SET max_id = (SELECT MAX(pkey) FROM db_table);
    SET new_id = max_id;
    RETURN new_id;
END;
$$
DELIMITER ;

谢谢您的回答

1 个答案:

答案 0 :(得分:0)

您不能像您想要的那样使用变量;基本上,如果需要变量标识符(表名,列名等),则需要使用动态SQL。但是MySQL函数不支持动态SQL。因此,您需要使用带有output_packet参数的过程。

考虑:

OUT

然后,您调用该过程并像下面那样恢复out值:

drop procedure if exists create_id;
delimiter $$

create procedure create_id(in _db_table text, in _pkey text, out _max_id int)
begin
    set @max_id = null;
    set @sql = concat('select max(`', _pkey, '`)  into @max_id from `', _db_table, '`');
    prepare stmt from @sql;
    execute stmt;
    deallocate prepare stmt;
    set _max_id = @max_id;
end;
$$

delimiter ;

注意:我看不到原始函数的最后两个参数的要点,因此我将其删除。