我正在尝试创建一个函数,在其中一个表字段中搜索字符串,然后返回一个新的用户表。基本上,在一张桌子里我有
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表。任何帮助将不胜感激。
答案 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