ストアドプロシージャの引数に渡された名前のテーブルを削除して作成したいとします。私は以下のストアドプロシージャを書いた。MySQL:ストアドプロシージャで動的にテーブルを作成するには?
CREATE DATABASE db1;
USE db1;
DROP PROCEDURE IF EXISTS drop_create;
DELIMITER $$
CREATE PROCEDURE drop_create(IN tbname VARCHAR(15))
BEGIN
SET @droptable = CONCAT ("DROP TABLE IF EXISTS ", tbname);
SET @createtable = CONCAT("CREATE TABLE ", tbname, " (c0 INT PRIMARY KEY, c1 VARCHAR(16000)");
PREPARE deletetb FROM @droptable;
PREPARE createtb FROM @createtable ;
EXECUTE deletetb ;
EXECUTE createtb;
DEALLOCATE PREPARE createtb ;
DEALLOCATE PREPARE deletetb ;
END $$
DELIMITER ;
私が実行すると、次のエラーが発生します。
Call db1.drop_create('abd');
ERROR 1064 (42000): 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 '' at line 1
明らかに、上記のSPで構文エラーが見つかりません。私は間違って何をしていますか?問題はCREATE TABLE関連のステートメントになければなりません。なぜなら私がコメント行#8、10、12 & 13のときにSPがうまく動作するからです。私はMysqlを使用しています5.6
MySQLではVARCHARを65535バイトまでにすることができます。 [The CHAR and VARCHAR types](https://dev.mysql.com/doc/refman/5.7/en/char.html)を参照してください。 –
Mr.Bill Kanwinさん、有益な追加をしてくれてありがとうございます。 –
Mr.Bill Karwinさん、有益な追加をいただきありがとうございます。 –