2016-11-24 5 views
0

Процедура должна принять существующую таблицу (oldtable) и создать новую таблицу (new_table_n). Он работает, но не создает новую таблицу. Любая помощь будет оценена.Хранимая процедура не создает новую таблицу

DELIMITER $$ 
    CREATE PROCEDURE P_DYN_TABLE(IN OLDTABLE VARCHAR(30), IN NEW_TABLE_N VARCHAR(30)) 
    LANGUAGE SQL 
    BEGIN 

    DECLARE STATEMENT_1 VARCHAR(1000); 

    DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' 
      SET STATEMENT_1 = ''; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 

    SET STATEMENT_1 = CONCAT('CREATE TABLE ',NEW_TABLE_N,' AS SELECT * FROM ',OLDTABLE,' WHERE 1=2'); 
    PREPARE S1 FROM @STATEMENT_1; 
    EXECUTE S1; 

    SET STATEMENT_1 = CONCAT('INSERT INTO ',NEW_TABLE_N,' SELECT * FROM ',OLDTABLE); 
    PREPARE S2 FROM @STATEMENT_1; 
    EXECUTE S2; 

    END; $$ 
+0

Отсутствует; после второго обработчика или просто полностью удалите его. – Shadow

ответ

0
DELIMITER $$ 
CREATE PROCEDURE P_DYN_TABLE(IN OLDTABLE VARCHAR(30), IN NEW_TABLE_N VARCHAR(30)) 
BEGIN 
DECLARE STATMENT VARCHAR(1000); 
SET @STATMENT=""; 
SET @STATMENT = CONCAT('CREATE TABLE ',NEW_TABLE_N,' AS SELECT * FROM ',OLDTABLE,' WHERE 1=2'); 
PREPARE S1 FROM @STATMENT; 
EXECUTE S1; 
DEALLOCATE PREPARE S1; 
SET @STATMENT = CONCAT('INSERT INTO ',NEW_TABLE_N,' SELECT * FROM ',OLDTABLE); 
PREPARE S1 FROM @STATMENT; 
EXECUTE S1; 
DEALLOCATE PREPARE S1; 
END; $$ 
Смежные вопросы