gpt4 book ai didi

sql - 如何从动态查询插入表?

转载 作者:行者123 更新时间:2023-11-29 12:19:27 25 4
gpt4 key购买 nike

我的 Postgres 版本是:

"PostgreSQL 9.4.4, compiled by Visual C++ build 1800, 32-bit"

假设我有两个表 Table1Table2,它们分别有列 col1col2

CREATE TABLE Table1(col1 int);
CREATE TABLE Table2(col2 int);

还有一个表Table3存储了一个将数据从Table1迁移到Table2的公式:

CREATE TABLE Table3 (     
tbl_src varchar(200),
col_src varchar(500),
tbl_des varchar(200),
col_des varchar(100),
condition varchar(500)
);

INSERT INTO Table3 (tbl_src, col_src, tbl_des, col_des, condition)
SELECT 'Table1','col1','Table2','col2',NULL

如何在动态查询中编译此公式并插入到目标表中?

最佳答案

动态构建命令的基本查询:

SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;

这会产生如下查询:

INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"

注意引用的大写拼写。与在 SQL 命令中不带引号的标识符自动折叠为小写不同,表中的字符串现在区分大小写!

我建议您永远不要双引号标识符,只使用合法的小写名称。

自动化:

DO
$$BEGIN
EXECUTE (
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3
-- WHERE table3_id = 123 -- select only *one* row!
);
END$$;

需要了解 format()功能。 Read the manual .

您也可以将其包装到 plpgsql 函数中并传递其他参数:

关于sql - 如何从动态查询插入表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34194889/

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