mysql 动态传入表名 存储过程_mysql – 存储过程函数中的动态表名

我编写了一个存储过程函数来从表中获取名称.问题是我希望将表名作为参数传入(我需要使用此函数的几个不同的表):

DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `getName`(tableName VARCHAR(50), myId INT(11)) RETURNS VARCHAR(50)

begin

DECLARE myName VARCHAR(50);

SELECT

'name' INTO myName

FROM

tableName

WHERE

id=myId;

RETURN myName;

end

此方法有错误,因为它使用变量名称“tableName”而不是变量的实际值.

我可以通过使用这样的CONCAT在一个过程中解决这个问题:

SET @GetName = CONCAT("

SELECT

'name'

FROM

",tableName,"

WHERE

id=",myId,";

");

PREPARE stmt FROM @GetName;

EXECUTE stmt;

…但是,当我尝试在函数中执行此操作时,我会收到一条消息:

Dynamic SQL is not allowed in stored function or trigger

我尝试使用一个程序,但我不能让它只返回一个值,就像一个函数一样.

所以,任何人都可以看到解决这个问题的方法.它看起来非常基本.

解决方法:

如果要使用标识符来扩展SQL语句,则需要使用预准备语句;但准备好的陈述不能用于功能.因此,您可以使用OUT参数创建存储过程 –

CREATE PROCEDURE getName

(IN tableName VARCHAR(50), IN myId INT(11), OUT myName VARCHAR(50))

BEGIN

SET @GetName =

CONCAT('SELECT name INTO @var1 FROM ', tableName, ' WHERE id=', myId);

PREPARE stmt FROM @GetName;

EXECUTE stmt;

SET myName = @var1;

END

使用示例 –

SET @tableName = 'tbl';

SET @myId = 1005;

SET @name = NULL;

CALL getName(@tableName, @myId, @name);

SELECT @name;

标签:mysql,stored-procedures

来源: https://codeday.me/bug/20190923/1813830.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值