我正在使用PostgreSQL 8.4,我想创建一个返回多行查询的函数 以下功能可以不工作:
create function get_names(varchar) returns setof record AS $$
declare
tname alias for $1;
res setof record;
begin
select * into res from mytable where name = tname;
return res;
end;
$$ LANGUAGE plpgsql;
类型record
仅允许单行。
如何返回整个查询?我想将函数用作查询模板。
答案 0 :(得分:5)
CREATE OR REPLACE FUNCTION get_names(_tname varchar)
RETURNS TABLE (col_a integer, col_b text) AS
$func$
BEGIN
RETURN QUERY
SELECT t.col_a, t.col_b -- must match RETURNS TABLE
FROM mytable t
WHERE t.name = _tname;
END
$func$ LANGUAGE plpgsql;
这样打电话:
SELECT * FROM get_names('name')
重点:
使用RETURNS TABLE
,因此您不必在每次通话时都提供列名列表。
使用RETURN QUERY
,更简单。
表格限定列名,以避免与名称相同的OUT
参数(包括用RETURNS TABLE
声明的列)命名冲突。
使用命名变量而不是ALIAS
。更简单,做同样的事情,这是首选方式。
这样的简单函数也可以用LANGUAGE sql
编写:
CREATE OR REPLACE FUNCTION get_names(_tname varchar)
RETURNS TABLE (col_a integer, col_b text) AS
$func$
SELECT t.col_a, t.col_b --, more columns - must match RETURNS above
FROM mytable t
WHERE t.name = $1;
$func$ LANGUAGE sql;