Как создать хранимую процедуру для вставки данных из одной таблицы в другую, передав параметр - PullRequest
0 голосов
/ 09 июня 2019

Есть две таблицы 1.FinalTable (f1, f2, f3, f4) 2.DemoTable_1 (d1, d2, d3, d4)

Я хочу вставить данные из DemoTable_1 в FinalTable, используя следующий запрос SQL:

INSERT INTO `FinalTable`
(`f1`,`f2`,`f3`,`f4`)
 (SELECT `d1`,`d2`,`d3`,`d4`
 FROM DemoTable_1);

Итак, я хочу создать процедуру, передав DemoTable_1 в качестве параметра для процедуры. Так что я могу изменить исходную таблицу как DemoTable_2, DemoTable_3, DemoTable_4 и т. Д.

Я использую сообщество SQLyog

DELIMITER //
CREATE OR REPLACE PROCEDURE FinalTable_insert(IN source_table VARCHAR(40))
 BEGIN
 INSERT INTO `FinalTable`
(`f1`,`f2`,`f3`,`f4`)
 (SELECT `d1`,`d2`,`d3`,`d4`
 FROM source_table);
 END //
DELIMITER ;

CALL FinalTable_insert('DemoTable_1');

Код ошибки: 1146 Таблица 'source_table' не существует

1 Ответ

0 голосов
/ 11 июня 2019

Входные переменные не оцениваются как имена таблиц, вы должны построить запрос в строке и выполнить его, используя подготовленный оператор:

DELIMITER //
DROP PROCEDURE IF EXISTS FinalTable_insert //
CREATE PROCEDURE FinalTable_insert(IN source_table VARCHAR(40))
 BEGIN

    SET @sql = CONCAT("INSERT INTO `FinalTable`
            (`f1`,`f2`,`f3`,`f4`)
            SELECT `d1`,`d2`,`d3`,`d4`
            FROM `",source_table,"`");

    PREPARE stmt1 FROM @sql;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1; 

 END //
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...