有两个表 1.最终表格(f1,f2,f3,f4) 2.DemoTable_1(d1,d2,d3,d4)
我想使用以下SQL查询将数据从DemoTable_1插入FinalTable:
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'不存在
答案 0 :(得分:0)
输入变量的值不等于表名,您必须在字符串中构建查询并使用准备好的语句执行该查询:
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 ;