sql - 如何在 postgres 存储过程中将数据插入到字符串数组中
问题描述
我有一个伪存储过程,如下所示:
CREATE OR REPLACE FUNCTION get_data()
RETURNS void AS $$
DECLARE
rec_new RECORD;
querystring TEXT[];
cursor_file CURSOR FOR
select * from tableA;
BEGIN
--open the file cursor
OPEN cursor_file;
LOOP
FETCH cursor_file into rec_new;
EXIT WHEN NOT FOUND;
querystring='{insert into tableB(fileid) values %}',rec_new.fileid;
END LOOP;
CLOSE cursor_file;
END; $$
LANGUAGE plpgsql;
我想创建多个插入查询,其中动态 fileId 在循环上进行迭代,并将它们放在('querstring')
由逗号分隔符分隔的字符串数组中。上面的代码没有给我确切的结果。实现这一目标的正确方法是什么?
预期的输出如下:
{insert into tableB(fileid) values ('fileA'),
insert into tableB(fileid) values ('fileB'),
insert into tableB(fileid) values ('fileC')}
然后这个querystring
数组也需要执行。
解决方案
您可能正在寻找“数组追加”运算符||
。
但这是解决问题的一种过于复杂的方法。你可以用类似的东西更简单、更有效地做到这一点
SELECT array_agg(
format(
'insert into tableB(fileid) values (%L)',
fileid
)
) INTO querystring
FROM tablea;
推荐阅读
- java - PhotoView 库获取像素的颜色
- php - 使用 PHP 或 Javascript 重命名本地磁盘上的文件
- javascript - 从 Unity 播放器外部开始的触摸获取 touchInput
- java - 如何从 javafx 组合框中获取模型 ID
- python-3.6 - 如果该行以加号开头且下一行以 Solaris 开头,则加入该行
- java - 如何在 grafika 的连续捕获中添加音频
- elasticsearch - 将 kendo 搜索查询映射到 elasticsearch 查询
- oauth-2.0 - oAuth2 使用 Olut:invalid_request for Exact online
- ubuntu - 找不到命令“get”,但有 18 个类似的
- asp.net - C# - 如何将单个 ListView 与来自 Sitefinity 的多个 DataSource 绑定