Как вернуть пользовательское значение из вызова функции?

#postgresql #postgresql-13

Вопрос:

Я пытаюсь вызвать функцию, вызываемую account.user_available_sel в PostgreSQL 13, которая возвращает таблицу данных. Это очень просто, вот так:

 SELECT * FROM account.user_available_sel(_email => 'email@xxx.xxx');
 

SELECT * Часть возвращает всю таблицу данных, которая включает данные пользователя email, password, forename, surname. dob и т. Д.

Поскольку предполагается, что это только для проверки того, что an email еще не зарегистрирован, я хочу вернуть только простое значение, например invalid , если запись существует. На мой взгляд, что-то вроде этого (очевидно, не работает):

 SELECT 'invalid' FROM account.user_available_sel(_email => 'email@xxx.xxx');
 

Как я мог просто вернуть эту строку вместо всего набора записей?

Ответ №1:

Вы можете использовать EXISTS для получения логического значения.

 SELECT EXISTS (SELECT *
                      FROM account.user_available_sel(_email => 'email@xxx.xxx'));
 

И если это вас не удовлетворяет, вы, конечно, можете CASE обойти это и получить самостоятельные строки.

 SELECT CASE
         WHEN EXISTS (SELECT *
                             FROM account.user_available_sel(_email => 'email@xxx.xxx')) THEN
           'existent'
         ELSE
           'non-existent'
       END;
 

Точно так же вы можете сделать это для чисел или для чего угодно.