2009-04-12 2 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 your_view%ROWTYPE; 

или

Вы должны указать поля и тип данных.

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

Ok, как я могу это сделать с помощью Npgsql, в ADO.NET? – Markus

+0

RETURNS SETOFF messages_wall - не работает – Markus

+0

Извините, RETURNS SETOF должен работать. –

1

Для вашего примера не требуется объединение соединения в (PL/pgSQL). Как отметил Люк М, представление было бы самым простым и быстрым.

Если вы настаиваете на наличии функции, но ваш следующий выбор должен быть SQL function - больше информации here и here.

3

SELECT * FROM test2() AS tabletest2 (id integer, name text);, если вы действительно хотите использовать функцию, но вид лучше в этом случае

Смежные вопросы