我的功能是这样的:
CREATE OR REPLACE FUNCTION insert_o_record_desc()
RETURNS text
LANGUAGE 'plpgsql'
AS $$
DECLARE
o_record TEXT DEFAULT '';
rec_o_record RECORD;
cur_o_record CURSOR FOR SELECT * FROM o_record_fact;
v_spent_desc varchar(255) DEFAULT NULL;
BEGIN
-- Open the cursor
OPEN cur_o_record;
LOOP
-- Fetch row into the person
FETCH cur_o_record INTO rec_o_record;
-- Exit when no more row to fetch
EXIT WHEN NOT FOUND;
EXECUTE 'SELECT string_agg(value_label, ', ') as vlabel FROM spent_table WHERE code ~* $1'
INTO v_spent_desc
USING regexp_replace(TRIM(rec_o_record.spent_column), '(.)(?!$)','\1|','g');
END LOOP;
-- Close the cursor
CLOSE cur_o_record;
RETURN o_record;
END;
$$;
select insert_o_record_desc();
然后我收到此消息的错误
错误:查询返回 2 列
上下文:查询:'从花费的表中选择 string_agg(value_label1, ', ') 作为 vlabel WHERE 代码 ~* $1'
PL/pgSQL 函数 insert_o_record_desc() 第 123 行位于 EXECUTE
SQL 状态:42601
但是当我刚刚运行这个查询时
SELECT string_agg(value_label, ', ') as vlabel FROM spent_table WHERE code ~* 'A|B|C|E';
我用一列得到了结果。这是为什么?
哈哈,愚蠢的逃跑! '',''
EXECUTE 'SELECT string_agg(value_label,'','') as vlabel FROM spent_table WHERE code ~* $1'