我有一个获取PK,动态表名称和JSON的函数。 动态表是较早创建的。 我需要输入此表中接收到的数据,为此,我正在使用EXECUTE FORMAT,但是我不知道如何使用SELECT将所有JSON扔到表中。 JSON有几个对象。
下面是代码示例:
CREATE FUNCTION FUNC_TEST(COD_FK BIGINT,
NAME_TABLE TEXT,
JSON JSONB)
RETURNS VOID
LANGUAGE plpgsql
AS
$$
BEGIN
EXECUTE FORMAT(
'INSERT INTO public.%I (
COD_FK,
A,
B,
C) L%',
NAME_TABLE,
(SELECT COD_FK,
(SRC ->> 'A') :: TEXT,
(SRC ->> 'B') :: BIGINT,
(SRC ->> 'C') :: TEXT
FROM JSONB_ARRAY_ELEMENTS(JSON) SRC));
END
$$;
返回的错误是:
ERROR: subquery must return only one column.
如何执行此插入?
答案 0 :(得分:0)
子查询应该是动态字符串的一部分:
EXECUTE
format('INSERT INTO public.%I
(COD_FK, A, B, C)
SELECT %s,
(SRC ->> 'A') :: TEXT,
(SRC ->> 'B') :: BIGINT,
(SRC ->> 'C') :: TEXT
FROM JSONB_ARRAY_ELEMENTS(%L) SRC',
NAME_TABLE,
COD_FK,
JSON);