【问题标题】:MySQL - Alter table syntax in stored procedureMySQL - 更改存储过程中的表语法
【发布时间】:2013-06-20 14:58:47
【问题描述】:

我创建了一个存储过程来更改列名,如下所示。

表结构:

CREATE TABLE ``procedurecheck`` ( ``id`` int(10) NOT NULL AUTO_INCREMENT, ``colname`` varchar(50) NOT NULL, ``proccheck1`` varchar(50) NOT NULL, PRIMARY KEY (``id``) ) ENGINE=InnoDB DEFAULT CHARSET=latin1

This is a test code only to check procedures.

DELIMITER $$
CREATE PROCEDURE updateColumn(IN COLNAME varchar (50), IN NEWCOLNAME varchar (50))
BEGIN
  SET @ddl = CONCAT('alter table procedurecheck CHANGE (', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL)');
  PREPARE STMT FROM @ddl;
  EXECUTE STMT;
END $$
DELIMITER ;

当我调用这个函数时:

CALL updateColumn('proccheck','newproccheck');

我收到如下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(proccheck newproccheck VARCHAR(50) NOT NULL)' at line 1

任何指针都会有所帮助。

谢谢

【问题讨论】:

  • 删除(),例如。 CONCAT('alter table procedurecheck CHANGE ', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL');
  • 非常感谢@JW웃。效果很好。请把它作为答案,以便我接受。

标签: mysql stored-procedures parameter-passing alter-table


【解决方案1】:

删除(),例如。

CONCAT('alter table procedurecheck CHANGE ', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL');

【讨论】:

    【解决方案2】:
    如果存在则删除过程 pl_updateColumnName; 分隔符 $$ 创建过程 pl_updateColumnName(IN tblName varchar (50), IN COLNAME varchar (50), IN NEWCOLNAME varchar (50)) 开始 SET @ddl = CONCAT('alter table', tblName,'CHANGE', COLNAME, '', NEWCOLNAME, 'VARCHAR(50) NOT NULL'); 从@ddl准备STMT; 执行STMT; 结束 $$ 分隔符;

    【讨论】:

      【解决方案3】:

      你可以试试这个存储过程:

      DROP PROCEDURE IF EXISTS pl_alterColumnName;
      DELIMITER $$
      CREATE PROCEDURE pl_alterColumnName(IN tblName varchar (50), IN COLNAME varchar (50), IN NEWCOLNAME varchar (50))
      BEGIN
        SET @ddl = CONCAT(' alter table ', tblName  ,' CHANGE ', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL');
        PREPARE STMT FROM @ddl;
        EXECUTE STMT;
      END $$
      DELIMITER ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        • 2020-03-08
        • 2012-04-12
        • 2014-07-12
        相关资源
        最近更新 更多