delimiter //
DROP PROCEDURE IF EXISTS drop_table//
create procedure drop_table(in table_name varchar) #创建带参数的存储过程
begin
drop table if EXISTS table_name;
end//
delimiter ;
call drop_table('a')
我使用 Navicat 创建一个过程来删除 mysql 中的参数表。
错误:无效的存储过程语法
最佳答案
正如 P.Salmon 所评论的,您不能直接在 sql 语句中传递替换过程参数(即变量)。您需要动态 sql:将查询构建为字符串,然后执行它。
delimiter //
create procedure drop_table(in p_table_name varchar(200))
begin
set @q = concat('drop table if exists ', p_table_name);
prepare stmt from @q;
execute stmt;
deallocate prepare stmt;
end//
delimiter ;
注意:varchar
数据类型需要一个长度。
关于mysql - 我可以创建一个过程或函数来删除 mysql 中的参数表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59046272/