我试图在Postgres 9.1中生成一个查询,根据需要生成尽可能多的列以适应日期范围。下面的函数生成我需要的SQL字符串,但是我不能执行函数返回的SQL。 结果需要看起来像单个(或将来多个)描述符列,然后是构成日期范围所需的尽可能多的列。这些字段的标题将是日期,而这些字段的记录内容将是文本。
我不确定我是否采用这种方法走上正轨,所以如果有更简单的方法,那么我更愿意接受它。任何帮助将不胜感激。
CREATE OR REPLACE FUNCTION admin."TV_EmpStatusSQL_func" (
"StartDate" date = 'now'::text::date,
"EndDate" date = 'now'::text::date + 7
)
RETURNS text AS
$body$
DECLARE
dateval DATE;
sqlstring TEXT;
StartDate ALIAS FOR $1;
EndDate ALIAS FOR $2;
BEGIN
sqlstring := 'SELECT admin."HR_Employees_view"."EmployeeName"';
dateval := StartDate;
WHILE dateval <= EndDate LOOP
sqlstring := sqlstring || ', admin."TV_WhereIsEmployee_func"(admin."HR_Employees_view"."HRE_ID", ''' || dateval || ''') AS "' || dateval || '"';
dateval := dateval + 1;
END LOOP;
sqlstring := sqlstring || ' FROM admin."HR_Employees_view";';
RETURN sqlstring;
END;
$body$
LANGUAGE 'plpgsql'
STABLE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
答案 0 :(得分:1)
在plpgslql函数中使用execute
来执行动态sql
execute sqlstring;