gpt4 book ai didi

Mysql存储过程不以表名为参数

转载 作者:可可西里 更新时间:2023-11-01 07:13:56 27 4
gpt4 key购买 nike

我写了一个存储过程。除了将表名作为输入参数外,它工作正常。

让我们看看我在 MySQL 中的过程:

DELIMITER $$
USE `db_test`$$

DROP PROCEDURE IF EXISTS test_proc$$

CREATE DEFINER=`root`@`localhost`
PROCEDURE `test_proc`(IN serviceName VARCHAR(10),IN newsInfoTable VARCHAR(100))
BEGIN
SELECT COUNT(*) FROM newsInfoTable WHERE newsServiceName=serviceName;
END$$

DELIMITER ;

存储过程调用参数:

USE db_test;
CALL test_proc('abc','tbl_test_news');

此处服务名称参数工作正常。但是,如果我将 newsInfoTable 变量作为表输入参数,则会显示错误。

Table 'db_test.newsinfotable' doesn't exist

为什么这只发生在表格参数上?我怎样才能从此错误中检索或

如何将表名作为参数传递给存储过程?

最佳答案

SP 无法使用动态表名进行优化,因此许多数据库(包括 MySQL)不允许动态指定表名。

解决此问题的一种方法是使用动态 SQL。

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`(IN serviceName VARCHAR(10),IN newsInfoTable VARCHAR(100))
BEGIN
SET @sql = CONCAT('SELECT COUNT(*) FROM ',newsInfoTable,' WHERE newsServiceName=?;');
PREPARE s1 from @sql;
SET @paramA = serviceName;
EXECUTE s1 USING @paramA;
END$$

关于Mysql存储过程不以表名为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609778/

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