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

时间:2014-05-05 17:20:04

标签: 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;
    EXECUTE stm;
END

我收到以下错误:

  

错误代码1054未知列

如果我写的话,同样的问题:

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

END

我希望有人对这个问题有所了解

由于

1 个答案:

答案 0 :(得分:0)

首先,你打电话给call Drop_table_Gen(curr_rate);。你不应该引用像call Drop_table_Gen('curr_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错误

  

ERROR 1051(42S02):未知表'curr_rate'

请在此处查看详细文档RESIGNAL Syntax