我需要使用连接进行选择查询。这应该写在一个函数中。我的方法不起作用:
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应用程序调用此函数。我该怎么办?
答案 0 :(得分:3)
SELECT * FROM test2() AS tabletest2 (id integer, name text);
如果你真的想要使用一个函数,但在这种情况下视图更好
答案 1 :(得分:2)
将表连接到您的函数中,您可以使用view。
退回设置 your_view ;
您可能还必须使用适当的数据类型定义r:
r your_view%ROWTYPE;
或
您必须指定字段和数据类型。
SELECT * FROM test2() AS fields_1 as INTEGER, fields_2 AS ... ;
答案 2 :(得分:1)
对于您的示例,在(PL / pgSQL)函数中包装连接是不必要的。正如Luc M所提到的那样,视图最简单,最快。
如果您坚持使用某项功能,但下一个选择应为SQL function - 更多信息here和here。