我想做一个函数,返回一个包含几列的表 依赖于每个参数输入的列数
即: 如果变量num_columns为10,则该函数必须返回10列,并且 如果num_columns为15,则该函数必须返回15列 这是我的功能:
CREATE OR REPLACE FUNCTION "estadisticas"."fn_tabla_mes_lab_x_secc"()
RETURNS setof record AS $BODY$
DECLARE
dia1 int;dia2 int;dia3 int;dia4 int;dia5 int;dia6 int;dia7 int;dia8 int;dia9 int;dia10 int;
dia11 int;dia12 int;dia13 int;dia14 int;dia15 int;dia16 int;dia17 int;dia18 int;dia19 int;dia20 int;dia21 int;dia22 int;dia23 int;dia24 int;dia25 int;
contador INT := 0;
num_columnas INT:= 15;
BEGIN
dia1:= 1;dia2:= 32;dia3:= 234 ;dia4:= 534;dia5:= 33;dia6:= 123;dia7:= 11;dia8:= 62;dia9:= 32;dia10:= 21;
dia11:= 0;dia11:= 0;dia13:= 0 ;dia14:= 0;dia15:= 0;dia16:= 0;dia17:=0; dia18:= 0;dia19:=0;dia20:= 0; dia21:= 0;dia22 := 0; dia23:= 0;dia24:= 0;dia25:= 0;
WHILE contador<>5 LOOP
IF num_columnas = 10 THEN
RETURN query SELECT dia1,dia2,dia3,dia4,dia5,dia6,dia7,dia8,dia9,dia10;
ELSE
RETURN query SElECT dia11,dia12,dia13,dia14,dia15,dia16,dia17,dia18,dia19,dia20,dia21,dia22,dia23,dia24,dia25;
END IF;
contador:=contador+1;
END LOOP;
RETURN;
END$BODY$
LANGUAGE plpgsql
显然,setof记录数据类型存在问题,因为它返回以下错误
程序执行失败
错误:在上下文中无法正常运行 que no puede aceptarlo上下文:funciónPL / pgSQL fn_tabla_mes_lab_x_secc()zh_cn 14查询返回
时间:0,002s
能帮我吗?
答案 0 :(得分:0)
如果未在执行该存储功能的查询中定义列名,则不能使用RETURNS SETOF record
。您可以使用其他替代方法,例如
请在此处Refactor a PL/pgSQL function to return the output of various SELECT queries
访问答案