2009-04-12 60 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' 

錯誤:需要返回「記錄」

我應該叫從.NET應用程序這個功能功能的字段定義列表。我應該如何繼續?

回答

2

將表連接到您的函數,您可以使用視圖。

RETURNS SETOF your_view;

你可能必須與相應的數據類型定義過於R:

r your_view%ROWTYPE; 

您必須指定的字段和數據類型。

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

可以更好的,我怎麼能做到這一點Npgsql的使用,在ado.net? – Markus 2009-04-12 19:02:15

1

對於您的示例,不需要在(PL/pgSQL)函數中包裝聯接。正如Luc M所提到的,一個觀點將是最簡單和最快的。

如果你堅持有功能,但你的下一個選擇應該是SQL function - 更多信息herehere

3

SELECT * FROM test2() AS tabletest2 (id integer, name text);如果你真的想使用的功能,但觀點是在這種情況下