PostgreSQL:错误:查询返回 2 列

问题描述 投票:0回答:1

我的功能是这样的:

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';

我用一列得到了结果。这是为什么?

postgresql stored-functions
1个回答
0
投票

哈哈,愚蠢的逃跑! '',''

    EXECUTE 'SELECT string_agg(value_label,'','') as vlabel FROM spent_table WHERE code ~* $1'
© www.soinside.com 2019 - 2024. All rights reserved.