我是MySQL的新手,我正在尝试从SQL Server移植一些存储过程。我创建了一个基本的存储过程,并在MySQL中传递了参数。
存储过程只需要一个参数,并根据提供的参数执行“如果存在则丢弃”。
在MySQL中运行时会导致以下错误。
似乎以某种方式将传递给“ mytablename”到存储过程中的参数作为语句的一部分而不是参数来执行。
有什么建议吗?
SQL语句:
call mydb.spDroptableifexist('customerdata');
结果:
0 row(s) affected, 1 warning(s): 1051 Unknown table 'mydb.mytablename'
这是存储过程:
USE `mydb`;
DROP procedure IF EXISTS `spDroptableifexist`;
DELIMITER $$
USE `mydb`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spDroptableifexist`(IN mytablename VARCHAR(255))
BEGIN
drop table if exists mytablename;
END$$
DELIMITER ;
答案 0 :(得分:1)
来自manual:
用户变量旨在提供数据值。他们不能是 直接在SQL语句中用作标识符或作为 标识符,例如在表或数据库名称为 预期的
要将变量用作表名,您需要准备一条语句并执行它:
SET @sql = CONCAT('DROP TABLE IF EXISTS ', mytablename);
PREPARE stmt FROM @sql;
EXECUTE stmt;