2013-03-31 26 views
2

我有一个名为person的表,它具有id,name,status,并且我想返回行作为带有1个参数的函数的结果(名称) 任何人都可以帮助我吗?请让它变得容易,因为我在postgresSQL中很不自在。如何从postgresql 9中的函数返回表,行或记录?

这是我的代码从正常功能

create or replace function fn_list(vname varchar) returns void as $$ 
begin 
    SELECT id,name,status from usuario WHERE name= vname; 
end; 
$$ language plpgsql; 

我知道IM返回void函数,但我该怎么办,如果我想行的列表????

回答

4

我知道,在甲骨文流水线回报这样做,所以我用的是找到 'RETURN NEXT' 从PLPGSQL:

http://www.postgresql.org/message-id/[email protected]

同样在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(); 
+0

,结果我得到(1名1,状态1),其值是一个文本? – MitoCode

+0

我想要一个像这样的列的结果1:id,colum2:name,colum3:status ....没有一个列的所有值由“,”隔开U_U请帮助我 – MitoCode

+0

对不起,我没有看到最后一行select * from getAllfoo();感谢它的工作 – MitoCode