如何将表名作为Mysql存储过程发送

如何将表名作为Mysql存储过程发送,mysql,stored-procedures,Mysql,Stored Procedures,我写了一个存储过程。但它不以表名作为参数。现在我如何将表名作为参数发送。请参阅下面我的过程: DELIMITER $$ USE `db_test`$$ DROP PROCEDURE IF EXISTS `test_proc`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`(IN newsInfoTable VARCHAR(100)) BEGIN SELECT news INTO @news

我写了一个存储过程。但它不以表名作为参数。现在我如何将表名作为参数发送。请参阅下面我的过程:

DELIMITER $$
USE `db_test`$$
DROP PROCEDURE IF EXISTS `test_proc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_proc`(IN newsInfoTable VARCHAR(100))
BEGIN              
    SELECT news INTO @news
    FROM newsInfoTable
    WHERE CURDATE()=DATE_FORMAT(date_time,'%Y-%m-%d') 
    ORDER BY date_time DESC LIMIT 1;
    SELECT @news;
 END$$
DELIMITER ;
调用参数:

USE db_test;
CALL test_proc('tbl_news_list');
但错误是:表'db\u test.newsinfotable'不存在

如何解决此问题。请提供帮助。

在程序正文中使用:

SET @s = CONCAT('SELECT ... FROM ', newsInfoTable);
PREPARE stmt FROM @s;
EXECUTE stmt;
//.....
DEALLOCATE PREPARE stmt;
您的代码应该如下所示:

SET @sql_stam = CONCAT('SELECT news INTO @news FROM ',newsInfoTable,  
 ' WHERE DATE_FORMAT(date_time,\'%Y-%m-%d\') 
ORDER BY date_time DESC LIMIT 1');
...
SELECT @news;

另外,我看不出有任何理由需要使用
@news
变量…

谢谢。但是,当我在prepair语句中使用DATE\u格式(DATE\u time,%Y-%m-%d')时,'(符号)出现错误。因此,我现在能做什么?亲爱的@a1ex07:Thx谢谢你。我写了一个程序。它执行正确,但调用过程时出错:错误代码:1327未声明变量:第三。请查看我的程序并给我一个解决方案:分隔符$$USEdb_dailystar$$DROP procedure IF EXISTStest_proc$$CREATEDEFINER=
root
@
localhost
过程
test_proc
(在newsInfoTable VARCHAR(100)中)开始设置@sql_stam=CONCAT('SELECT news INTO'、@news'FROM',newsInfoTable'WHERE',CURDATE(),'=?;');从@sql_stam准备s1;设置@where_param=DATE_格式(日期时间,%Y-%m-%d');EXE@riad:你最好更新你的问题。很难在评论中阅读您的代码。请查看我的问题:亲爱的@a1ex07:非常感谢您的时间。请查看我的问题,我有信心您可以帮助解决问题。因此,请帮助。我使用您更新的问题,但得到错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在“select@news”附近使用的正确语法;在第9行,你已经问了这个问题,它已经被回答了,你接受了答案,这个问题与:亲爱的约翰,谢谢你的关心。但是我在写完整的过程时出错了。从示例的意义上说,工作正常,这就是我接受答案的原因。但是在这里,我在“(char)上得到了错误当使用date_time函数时。因此我想要一个更好的解决方案。希望你投反对票。看看这个问题和副本以及接受的答案,这是一个真正的副本,因为你没有在这个问题中包含接受的答案中的任何信息。你最新的问题是:是否使用了正确的做事方式,所以这不是重复。