[英]MySQL - Alter table syntax in stored procedure
我创建了一个存储过程来更改列名,如下所示。
表结构:
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');
DROP PROCEDURE IF EXISTS pl_updateColumnName; DELIMITER $$ CREATE PROCEDURE pl_updateColumnName(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 ;
您可以尝试此存储的过程:
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 ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.