gpt4 book ai didi

mysql - 如何创建存储过程通过传递参数将数据从一个表插入到另一表

转载 作者:行者123 更新时间:2023-11-29 15:55:22 26 4
gpt4 key购买 nike

有两个表1.决赛 table (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');

Error Code: 1146 Table 'source_table' doesn't exist

最佳答案

输入变量不会计算为表名,您必须在字符串中构建查询并使用准备好的语句执行该查询:

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 ;

关于mysql - 如何创建存储过程通过传递参数将数据从一个表插入到另一表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56512932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com