Postgresql执行功能

时间:2012-05-23 05:39:38

标签: postgresql execute

我正在尝试创建一个函数,在其中一个表字段中搜索字符串,然后返回一个新的用户表。基本上,在一张桌子里我有

create table fooSearchTable (
    id          integer, -- PG: serial
    name        LongName unique not null,
    queryDef    LongString not null,
    primary key (id)
);

其中queryDef是一个包含另一个要执行的查询的字符串。例如,一行可能是

1 | resultName | select * from users where users.id = '4'

我得到了这个函数格式,用

开始了这个函数
create or replace function searchUsers(_searchName text) returns table (userID integer) as $$
begin
end;
$$ language plpgsql stable;

我需要运行一个SQL查询来查找_searchName匹配的行

select queryDef from fooSearchTable f
where f.name = _searchName;

这将返回字符串,但我不知道如何在函数中执行此字符串,因此我可以获得一个userIDs表。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

create or replace function searchUsers(_searchName text) 
   returns table (userID integer) 
as $$
  _query varchar;
begin
  select queryDef
     into _query 
  from fooSearchTable f
  where f.name = _searchName;

  return query execute _query;
end
$$ language plpgsql;

(未经测试,因此可能包含语法错误)

请注意select .. into要求语句只返回一行,否则您将在运行时收到错误。您需要确保条件达到此条件或在select语句中应用limit子句。

这在此解释:
http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#AEN54092