Mysql过程删除表,错误代码1054

Mysql过程删除表,错误代码1054,mysql,Mysql,我在尝试创建过程时遇到问题 首先是: DROP TABLE IF EXISTS curr_rate; 没问题,桌子掉了 现在进行一个程序: CREATE DEFINER=`root`@`localhost` PROCEDURE `Drop_table_Gen`(IN tname varchar(20)) BEGIN SET @query = CONCAT('DROP TABLE IF EXISTS `',tname,'`'); PREPARE stm FROM @query;

我在尝试创建过程时遇到问题

首先是:

DROP TABLE IF EXISTS curr_rate;
没问题,桌子掉了

现在进行一个程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `Drop_table_Gen`(IN tname varchar(20))
BEGIN
    SET @query = CONCAT('DROP TABLE IF EXISTS `',tname,'`');

    PREPARE stm FROM @query;
    EXECUTE stm;
END
我得到以下错误:

错误代码1054未知列

如果我写下同样的问题:

CREATE DEFINER=`root`@`localhost` PROCEDURE `drop_table_gen2`(IN tname varchar(20))
BEGIN
DROP TABLE IF EXISTS tname;

END
我希望有人知道这个问题


谢谢

首先,您的呼叫方式类似于
通话中断表\u Gen(当前费率)。您是否应该引用参数,如
calldrop\u table\u Gen('curr\u rate')因为它是
VARCHAR
类型

如果仍然是相同的错误,那么我看不出你试图放下桌子的方式有任何问题。我相信,不知何故,
IF EXIST
在这里制造了问题。尝试不使用(以下步骤),它将起作用

CREATE PROCEDURE `Drop_table_Gen`(IN tname varchar(20))
BEGIN
    SET @query = CONCAT('DROP TABLE `',tname,'`');

    PREPARE stm FROM @query;
    EXECUTE stm;
END
如果您使用的是MySQL 5.5或更高版本,那么您可以使用
EXIT HANDLER
在您的过程中捕获错误,如下所示

CREATE PROCEDURE `Drop_table_Gen`(IN tname varchar(20))
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
    SET @error_count = @error_count + 1;
    IF @a = 0 THEN RESIGNAL; END IF;
END;
BEGIN
    SET @query = CONCAT('DROP TABLE `',tname,'`');

    PREPARE stm FROM @query;
    EXECUTE stm;
END
然后在调用过程时

SET @error_count = 0;
SET @a = 0;
CALL Drop_table_Gen('curr_rate');
所以,如果表不存在,它将弹出SQL错误

错误1051(42S02):未知表“当前汇率”


请参阅此处的详细文档

如何调用过程
Drop\u table\u Gen
?我的意思是你通过了什么参数?我怀疑你传递的是空字符串。嗨,Rahul,我这样调用这个过程:调用Drop\u table\u Gen(curr\u rate);谢谢Rahul,问题在于引用。