我在MySQL存储过程中做错了什么?

Sky*_*ser 5 mysql sql 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
Run Code Online (Sandbox Code Playgroud)

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

在我自己挂起之前,我有点帮助,我非常热爱自己的生活.

Jam*_*ack 5

我希望您需要创建一个动态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;
Run Code Online (Sandbox Code Playgroud)