sql - 我在这个 MySQL 存储过程中做错了什么?

标签 sql mysql stored-procedures

我正在尝试使用以下存储过程。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` 
PROCEDURE `DeleteField`( IN _TABLENAME Text, IN _FIELDNAME text)
BEGIN
  if exists (select * from information_schema.Columns 
    where table_name = _TABLENAME and column_name = _FIELDNAME) 
  then 
    alter table _TABLENAME drop column _FIELDNAME;
  end if;
END

所以我调用 ('anytable','Anyfield') 并得到错误 错误代码:1146表'Database._tablename'不存在 这个 _tablename 应该是我的参数,而不是字符串。

在我上吊之前请帮忙,我太爱我的生活了。

最佳答案

我希望您需要创建一个动态 SQL 查询来执行此操作。

如何执行此操作的示例位于:

http://www.java2s.com/Code/SQL/Procedure-Function/Createadynamicstatementinaprocedure.htm

这将是 alter table 的替代品,尽管我已经对此进行了测试。

    DECLARE l_sql VARCHAR(4000);
    SET l_sql=CONCAT_ws(' ',
                'ALTER table ',_TABLENAME,' drop column ',_FIELDNAME);
    SET @sql=l_sql;
    PREPARE s1 FROM @sql;
    EXECUTE s1;
    DEALLOCATE PREPARE s1;

关于sql - 我在这个 MySQL 存储过程中做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428501/

相关文章:

sql - Postgres 下一行/上一行 SQL 查询

java - 我应该使用什么属性类型来保留日期和月份,而不是年份?

php - mysqli_multi_query() - 返回 true 而不是返回数据

mysql - 数据库中的拆分数字由破折号 (-) 分隔

c# - 将 SQL 保留在存储过程与代码中的优缺点是什么

sql-server-2008 - SQL Server 触发器可以向我发送电子邮件吗?

MySQL 过程语法错误 "Missing END"

sql - 小计行的索引?

php - MySQL 偶尔会返回错误的值

mysql - 如何将相关表的多个总和引用为子查询