我尝试创建程序时遇到问题。
首先:
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
我希望有人对这个问题有所了解
由于
答案 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