mysql - 我可以创建一个过程或函数来删除 mysql 中的参数表吗?

标签 mysql function procedure

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 ;

Demo on DB Fiddle

注意:varchar 数据类型需要一个长度。

关于mysql - 我可以创建一个过程或函数来删除 mysql 中的参数表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59046272/

相关文章:

mysql - 按抵达日期和离开日期之间的价格获取可用客房

MySQL不释放内存

c++ - 具有两个间接运算符(C++)的函数参数的用途

c - 为什么我不需要 scanf 的符号? (在 C 中)

Javascript函数根据输入返回两种不同类型的变量?

linux程序没有回答。我怎么知道哪个例程导致了卡住?

php - 选择依赖于父 ID 的列值而不需要 PHP 循环?

mysql - 从其他脚本调用时,Linux 脚本和 MySql 操作不起作用

php - 添加另一个条件过程

java - 使用Java仅从oracle数据库中获取过程的方法