gpt4 book ai didi

postgresql - Postgres - 从记录变量动态引用列

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

我在动态引用记录变量类型列时遇到问题。我在网上找到了很多技巧,但主要是关于触发器,我真的希望答案不是“它无法完成”……我有一个非常具体和简单的需求,请参见下面的示例代码;

首先,我有一个包含名为“lCols”的列名列表的数组。我循环通过一个记录变量来遍历我的数据,替换段落中与我的列名完全匹配的值。

DECLARE lTotalRec RECORD;        
DECLARE lSQL text;
DECLARE lCols varchar[];

p_paragraph:= 'I am [names] and my surname is [surname]';

lSQL :=
'select
p.names,
p.surname
from
person p
';

FOR lTotalRec IN
execute lSQL
LOOP
-- Loop through the already created array of columns to replace the values in the paragraph
FOREACH lVal IN ARRAY lCols
LOOP
p_paragraph := replace(p_paragraph,'[' || lVal || ']',lTotalRec.lVal); -- This is where my problem is, because lVal is not a column of lTotalRec directly like this
END LOOP;

RETURN NEXT;
END LOOP;

我的返回值是"lTotalRec"

中每条记录修改的段落

最佳答案

您可以使用 row_to_json() 函数将您的 record 转换为 json 值。一旦采用这种格式,您就可以使用 ->->> 运算符按名称提取列。

在 Postgres 9.4 及更高版本中,您还可以使用更高效的 jsonb 类型。

DECLARE lJsonRec jsonb;

...

FOR lTotalRec IN
execute lSQL
LOOP
lJsonRec := row_to_json(lTotalRec)::jsonb;
FOREACH lVal IN ARRAY lCols
LOOP
p_paragraph := replace(p_paragraph, '[' || lVal || ']', lJsonRec->>lVal);
END LOOP;

RETURN NEXT;
END LOOP;

参见 documentation了解更多详情。

关于postgresql - Postgres - 从记录变量动态引用列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410997/

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