2009-04-12 50 views
1

如何在postgres中的函数中使用select * from some_table?PostgreSQL函数select *

+0

您的意思是一个函数返回?否则,这个问题没有任何意义。然后你应该指定你所尝试的和你得到的错误。 – 2009-04-12 12:18:17

+0

您可能想要提供更多信息,您想要实现什么,您尝试过什么,如何失败以及您希望如何工作。 – 2009-04-13 19:23:26

回答

5
CREATE OR REPLACE FUNCTION my_function() RETURNS INTEGER AS ' 
    DECLARE 
     your_record your_table%ROWTYPE; 
    BEGIN 

     FOR your_record IN SELECT * FROM your_table 
     LOOP 

     -- 
     -- You can access fields of your table using . 
     -- your_record.your_field 
     ... 
     END LOOP; 


    END; 
' LANGUAGE 'plpgsql' 
STABLE; 

CREATE OR REPLACE FUNCTION my_function() RETURNS INTEGER AS ' 
    DECLARE 
     your_record your_table%ROWTYPE; 
    BEGIN 

     SELECT * INTO your_record FROM your_table; 

     -- 
     -- You can access fields of your table using . 
     -- your_record.your_field 

    END; 
' LANGUAGE 'plpgsql' 
STABLE; 


编辑:

与Join返回一个记录:

CREATE OR REPLACE FUNCTION my_function() RETURNS SETOF record AS ' 
    DECLARE 
     your_record record; 
    BEGIN 
     -- 
     -- You should specify a list of fields instead of * 
     -- 
     FOR your_record IN SELECT * FROM your_table INNER JOIN ...   
     RETURN NEXT your_record; 
     END LOOP; 
    END; 
' LANGUAGE 'plpgsql' 
STABLE; 

要使用创建my_function(),您必须指定字段和数据类型: See details here

2

有一个smipler方法,如果你想使用SQL的功能,在功能使用SQL语言:

CREATE FUNCTION getallzipcodes() 
RETURNS SETOF zip AS 
$BODY$ 
    SELECT * FROM zip; 
$BODY$ 
LANGUAGE 'sql'; 

,这可能是有用的太(如何调用函数)

SELECT function_returning_setof(); -- Wrong! 
SELECT * FROM function_returning_setof(); -- OK! 
SELECT function_returning_scalar(); -- OK 

reference