问题描述
我要查询所有律师和其他相关信息,并将其存储为json:
SELECT
key as table,trim(both '"' from json_array_elements(value)::text) as column
FROM json_each((
SELECT ed.value::json FROM (SELECT * FROM config_setting WHERE name = 'lawyers') ed ))
WHERE
key = 'user'
GROUP BY trim(both '"' from json_array_elements(value)::text),key
此查询返回2条记录(这是我期望的)。
一旦我尝试将其分配给函数中的变量,它只会返回1条记录:
CREATE OR REPLACE FUNCTION somefuncname() RETURNS tablearray LANGUAGE plpgsql AS $$
DECLARE _rec tablearray;
DECLARE total int;
BEGIN
SELECT t.column INTO _rec FROM (
SELECT
key as table,trim(both '"' from json_array_elements(value)::text) as column
FROM json_each((
SELECT ed.value::json FROM (SELECT * FROM config_setting WHERE name = 'lawyers') ed ))
WHERE
key = 'user'
GROUP BY trim(both '"' from json_array_elements(value)::text),key
) t;
RETURN _rec;
END
$$;
SELECT * from somefuncname();
tablearray
的定义非常简单,只是一个只有一列的表(无PK)。
解决方法
您不能将多个记录选择到变量中。如果您希望函数返回多个记录,请使用:
RETURN QUERY SELECT t.column FROM (........) t;