将文本作为查询运行

时间:2016-03-22 13:27:07

标签: postgresql

我有一个包含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,我得到的结果是查询本身而不是查询的结果

我在这里缺少什么?

无论如何,有更简单的方法吗?  我问这个我的简单函数和函数与我之前提到的参数。

1 个答案:

答案 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;