2009-04-12 55 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);如果你真的想使用的功能,但观点是在这种情况下