0

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

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

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

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;

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

4

1 回答 1

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要求语句只返回一行,否则在运行时会出错。您要么需要确保条件满足此条件,要么limit在 select 语句上应用子句。

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

于 2012-05-23T07:59:11.083 回答