PostgreSQL:使用EXECUTE .. INTO执行动态命令

时间:2014-07-01 07:38:36

标签: postgresql

我需要创建一个应该从中返回select语句结果的函数。

示例

Create or replace function fun_test(cola text,colb text,rel text)
returns table(columna text,columnb text)as 
$Body$
Declare
      table_name varchar :='Table_';
      temp_t record;
Begin
      table_name := table_name || rel;
      raise info '%',table_name;

             execute 'select distinct'||quote_ident(cola)||','||quote_ident(colb)|| ' from '||quote_ident(table_name) into temp_t; 

             return query select * from temp_t; /* Error relation "temp_t" does not exist

            /* Here I need to update temp_t also*/

end;
$Body$
language plpgsql; 

错误

ERROR:  relation "temp_t" does not exist
LINE 1: select * from temp_t
                      ^

1 个答案:

答案 0 :(得分:1)

您的函数可能会说RETURNS TABLE(...),但它不是为您构建数据库表。 "表"在这种情况下意味着完全不同的东西返回类型的更好描述将是"记录集" (事实上​​,它仅仅是RETURNS SETOF RECORD)的语法糖。

要从查询结果构建新的数据库表,请使用CREATE TABLE AS语句。