Последний оператор функции должен быть SELECT или INSERT UPDATE DELETE RETURNING

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;

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

ERROR: return type mismatch in function declared to return user_details
DETAIL: Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING. CONTEXT: SQL function "retrieve_add_friends"

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

вы слишком усложняете. Для этого не нужен цикл или даже PL / pgSQL.

a_horse_with_no_name 20.12.2018 18:22

Предоставление фактического вызова функции (и всегда вашей версии Postgres) значительно упростит решение.

Erwin Brandstetter 20.12.2018 18:23

какой тип данных - это столбец user_details.user_id, если это одно значение, вы не можете сравнить его с массивом. Вы, вероятно, захотите where user_id = any($1). И если этот столбец является целым числом, вы не должны сравнивать его со значением text.

a_horse_with_no_name 20.12.2018 18:25

Так у тебя есть ответ?

Erwin Brandstetter 06.02.2019 10:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
1 308
1

Ответы 1

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

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

SQL function "retrieve_add_friends"

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

Связанный:

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

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

Помимо всего прочего, отображаемая функция содержит несколько ошибок и может быть заменена простым SELECT.

Другие вопросы по теме