Последний оператор функции должен быть SELECT или INSERT UPDATE DELETE RETURNING - PullRequest
0 голосов
/ 20 декабря 2018
CREATE FUNCTION retrieve_add_friends(user_id text[]) 
RETURNS SETOF user_rows AS
$BODY$
BEGIN
    FOR user_rows IN EXECUTE SELECT * FROM user_details where user_id= $1
    LOOP

        FOR user_friends IN EXECUTE SELECT * FROM user_add_friends where user_id= $1
        LOOP
            IF user_rows.user_id!=user_friends.user_friend_id THEN
            RETURN NEXT user_rows;  
            END IF;
        END LOOP;

    RETURN;
    END LOOP;
    RETURN;
END
$BODY$
 language plpgsql VOLATILE;

Когда я выполняю это, я получаю следующую ошибку:

ОШИБКА: несоответствие типа возвращаемого значения в функции, объявленной для возврата user_details
ДЕТАЛИ: конечный оператор функции должен быть SELECT или INSERT / UPDATE/ УДАЛИТЬ ВОЗВРАТ.КОНТЕКСТ: функция SQL "retrieve_add_friends"

Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 20 декабря 2018

Отображаемая функция является функцией PL / pgSQL.

Вы вызываете другую функцию , очевидно, функцию SQL (для которой ошибка msg будет иметь смысл):

Функция SQL "retrieve_add_friends"

То же имя функции, но разные аргументы (и, возможно, в другой схеме базы данных).Вам известно о перегрузке функции и ее последствиях?

Похожие:

Для быстрой диагностики:

SELECT oid::regprocedure AS function_signature, *
FROM   pg_proc
WHERE  proname = 'retrieve_add_friends';

Кроме этого, отображаемая функция имеет несколько ошибок и может быть заменена простой SELECT.

...