我有一个包含2列的表格。第一个是序列号,第二个是存储为文本的查询。 更简单的问题,最后:我希望创建一个函数,我将输入序列号作为参数,函数将返回第二列中查询的结果。
我知道我必须使用我在堆栈上看到的其他问题中的'执行'命令。
即使在最终结果之前,我也做了这个简单的功能:
CREATE OR REPLACE FUNCTION public.try1()
RETURNS TABLE(datery timestamp without time zone)
LANGUAGE plpgsql
AS $function$
declare
stmt text;
BEGIN
stmt :='SELECT b FROM chks where a=4';
RETURN QUERY
execute stmt ;
END
$function$
此查询的结果选择b form chks,其中a = 4为:
'select now():: timestamp without time zone'
当我运行该函数时,我得到强制转换错误,告诉我函数的reutrn是varchar而不是时间戳,如果我将返回类型更改为varchar,我得到的结果是查询本身而不是查询的结果
我在这里缺少什么?
无论如何,有更简单的方法吗? 我问这个我的简单函数和函数与我之前提到的参数。
答案 0 :(得分:1)
尝试这样的事情:
CREATE OR REPLACE FUNCTION public.try1(query_number numeric)
RETURNS TABLE(datery timestamp without time zone)
AS $function$
DECLARE
stmt text;
BEGIN
SELECT b INTO stmt
FROM chks
WHERE a=query_number;
RETURN QUERY EXECUTE stmt;
END
$function$
LANGUAGE plpgsql STRICT;