簡體   English   中英

MySQL-更改存儲過程中的表語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM