2009-04-12 13 views
1

postgresの関数でselect * from some_tableを使用するにはどうすればよいですか?PostgreSQL関数select *

+0

)関数を呼び出しますか?さもなければ質問は意味をなさない。あなたは何を試したのか、どのようなエラーがあったのかを指定する必要があります。 –

+0

達成したいこと、何を試したこと、失敗したか、どのように機能させるかなど、より多くの情報を提供することができます。 –

答えて

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; 


EDIT:

では、レコードを返す参加:(はmy_functionを使用するには

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; 

)を、あなたがする必要はありフィールドとデータ型を指定します。 See details here

+0

しかし、私は他のテーブルとの結合をしたいですか? – Markus

+1

@ cmax:同じもの。それに参加するだけです。あなたがSQL joinを書く方法を知っていると仮定すると、同じことを関数で行うことができます。おそらくもっと詳細な質問をする必要があります。 –

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

関連する問題