Select 只插入 1 条记录
Select into is inserting only 1 record
我有一个查询要将所有律师和其他相关信息存储为 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
并且此查询 returns 我有 2 条记录(这正是我所期待的)。
一旦我尝试将其分配给函数中的变量,它只会 returns 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
的定义很简单,就是一个 table 一列(无 PK)。
为什么我的函数只返回 1 行而不是 2 行?我该如何解决?
您不能select将多条记录放入变量中。如果你想让函数return多条记录,那么使用:
RETURN QUERY SELECT t.column FROM (........) t;
我有一个查询要将所有律师和其他相关信息存储为 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
并且此查询 returns 我有 2 条记录(这正是我所期待的)。
一旦我尝试将其分配给函数中的变量,它只会 returns 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
的定义很简单,就是一个 table 一列(无 PK)。
为什么我的函数只返回 1 行而不是 2 行?我该如何解决?
您不能select将多条记录放入变量中。如果你想让函数return多条记录,那么使用:
RETURN QUERY SELECT t.column FROM (........) t;