Mit*_*ode 4 postgresql function
我有一个名为person的表,该表具有id,name,status,由于具有1个parameter(name)的函数,我想返回行。有人可以帮助我吗?请让它变得简单,因为在postgresSQL中我非常菜鸟。
这是我正常功能的代码
create or replace function fn_list(vname varchar) returns void as $$
begin
SELECT id,name,status from usuario WHERE name= vname;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
我知道即时通讯正在返回void函数,但是如果我想要一个行列表怎么办?
小智 12
使用循环返回查询结果速度慢且效率低。为此甚至不需要 PL/pgSQL 的开销。
最好的解决方案是:
create or replace function fn_list(vname varchar)
returns table(id integer, name text, status text)
as $$
SELECT id,name,status
from usuario
WHERE name= vname;
$$ language sql;
Run Code Online (Sandbox Code Playgroud)
如果因为需要在查询之前运行一些其他过程代码而需要 PL/pgSQL,return query
则应使用 then 而不是循环:
create or replace function fn_list(vname varchar)
returns table(id integer, name text, status text)
as $$
begin
-- do some work....
return query
SELECT id,name,status
from usuario
WHERE name= vname;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
然后使用以下方式调用它:
select *
from fn_list('Arthur');
Run Code Online (Sandbox Code Playgroud)
我知道Oracle中的管道返回会做到这一点,所以我用它来从plpgsql中查找“ RETURN NEXT”:
http://www.postgresql.org/message-id/007b01c6dc31$ae395920$0a00a8c0@trivadis.com
同样在grokbase上:
http://grokbase.com/t/postgresql/pgsql-performance/069kcttrfr/pipelined-functions-in-postgres
(编辑以添加官方文档):http : //www.postgresql.org/docs/9.2/static/plpgsql-control-structures.html
杀手,我自己必须利用这个。
再编辑一次以添加一些演示代码(直接来自postgresql.org文档):
CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT);
INSERT INTO foo VALUES (1, 2, 'three');
INSERT INTO foo VALUES (4, 5, 'six');
CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS
$BODY$
DECLARE
r foo%rowtype;
BEGIN
FOR r IN SELECT * FROM foo
WHERE fooid > 0
LOOP
-- can do some processing here
RETURN NEXT r; -- return current row of SELECT
END LOOP;
RETURN;
END
$BODY$
LANGUAGE 'plpgsql' ;
SELECT * FROM getallfoo();
Run Code Online (Sandbox Code Playgroud)