Ich möchte eine Tabelle löschen und erstellen mit Name im Argument der gespeicherten Prozedur übergeben. Ich habe folgende gespeicherte Prozedur geschrieben.MySQL: Wie man Tabelle dynamisch in der gespeicherten Prozedur erstellt?
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 ;
Wenn ich es ausführe, erhalte ich folgenden Fehler.
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
Anscheinend bin ich nicht in der Lage, den Syntaxfehler in SP oben zu finden. Was mache ich falsch? Problem muss in CREATE TABLE-bezogenen Anweisungen sein, denn wenn ich Zeile 8, 10, 12 & 13 kommentieren, dann funktioniert SP gut. Ich benutze Mysql 5.6
VARCHAR kann in MySQL bis zu 65535 Byte umfassen. Siehe [Die CHAR- und VARCHAR-Typen] (https://dev.mysql.com/doc/refman/5.7/en/char.html). –
Vielen Dank Herr Bill Kanwin für die isolierte eine nützliche Ergänzung. –
Vielen Dank Mr. Bill Karwin für die isolierte eine nützliche Ergänzung. –