2009-04-12 4 views
2

ジョインで選択クエリを作成する必要があります。これは関数で記述する必要があります。私のアプローチは動作しませんでした:Postgres関数

CREATE OR REPLACE FUNCTION test2() 
RETURNS SETOF record AS' 
DECLARE 
    r record; 
BEGIN 
    for r in SELECT * FROM messages_wall INNER JOIN location ON 
     messages_wall.id = location.id 
     loop 
    return next r; 
    end loop; 
end; ' 
LANGUAGE 'plpgsql' 

ERROR:列定義リストは、私は.NETアプリケーションからこの関数を呼び出す必要があり、「記録」

を返す関数に必要です。私はどのように進めるべきですか?

答えて

2

テーブルを関数に追加する代わりに、viewを使用することができます。

リターンSETOF your_view;

あなたは、おそらくあまりにも適切なデータ型とRを定義する必要があります。

r your_view%ROWTYPE; 

または

あなたはフィールドやデータ型を指定する必要があります。

SELECT * FROM test2() AS fields_1 as INTEGER, fields_2 AS ... ; 
+0

で良いですか? – Markus

+0

RETURNS SETOFF messages_wall - うまくいきません。 – Markus

+0

申し訳ありませんが、SETOFが動作するはずです。 –

1

たとえば、(PL/pgSQL)関数で結合をラップする例は不要です。 Luc Mが言及したように、ビューは最もシンプルで速くなります。

あなたの次の選択肢は、SQL function - 詳細はherehereでなければなりません。

3

SELECT * FROM test2() AS tabletest2 (id integer, name text); [OK]を、どのように私はこのado.netで、Npgsqlのを使用して行うことができ、あなたが本当にしたい機能を使用しますが、ビューはこの場合

関連する問題