Ich versuche eine gespeicherte Prozedur zu schreiben, die SHOW CREATE TABLE umschließt. Mein letztes Ziel ist es, den Schemanamen dynamisch nach information_schema zu suchen und SHOW CREATE TABLE schema.tableName auszuführen.mysql gespeicherte Prozedur ausgeführt SHOW CREATE TABLE
Es scheint, dass ich SHOW CREATE TABLE innerhalb einer Speicherprozedur nicht ausführen kann.
DELIMITER $$
DROP PROCEDURE IF EXISTS ct$$
CREATE PROCEDURE ct (tableName VARCHAR(50))
BEGIN
SHOW CREATE TABLE tableName;
END$$
DELIMITER ;
mysql> CALL ct('users');
ERROR 1146 (42S02): Table 'adcentraldb.tableName' doesn't exist
mysql>
Für diejenigen, die interessiert sind, das ist, was ich mit der SHOW TABLE-Wrapper CREATE am Ende, die
DELIMITER $$
DROP PROCEDURE IF EXISTS ct$$
-- Wraps around SHOW CREATE TABLE. Look at other schemas other than current.
CREATE PROCEDURE ct (tableName VARCHAR(50))
BEGIN
DECLARE dbName VARCHAR(50);
SET dbName = (SELECT `TABLE_SCHEMA` FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `TABLE_NAME` = tableName LIMIT 1);
SET @a=CONCAT("SHOW CREATE TABLE ", dbName, '.', tableName);
PREPARE stmt1 FROM @a;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;
Sie können keine Datenbank- oder Tabellennamen als Parameter in einer gespeicherten MySQL-Prozedur übergeben. Stattdessen müssen Sie eine SQL-Zeichenfolge und 'EXECUTE()' es erstellen, was bedeutet, dass Sie auch bei SQL-Injection vorsichtig sein müssen. –
Siehe [diese Frage] (http://stackoverflow.com/questions/9993908/passing-fieldname-as-parameter-in-mysql-stored-procedure) für ein Beispiel –
@ Yada meine Antwort funktioniert für Sie oder nicht? –