PostgreSQL, ЕСЛИ НЕ СУЩЕСТВУЕТ, возвращает выражение

#sql #postgresql

Вопрос:

Я хочу проверить, не существует ли запись в таблице, используя IF NOT EXISTS . Если эта запись не существует в таблице, верните следующее:

Успех Сообщение
0 ‘Идентификатор не существует’

У меня есть этот код до сих пор:

 do $
declare 
begin 
    if not exists (Select 1 from user.permission where permission_id = 1) then 
    0 as Success, 'No ID exists' as message;
    end if;
end $
 

И я получаю сообщение об ошибке «ОШИБКА: синтаксическая ошибка при или около «0»»

Я использую оператор IF, потому что я хочу возвращать что-либо, только если запись не существует, иначе она переходит к следующему запросу в моем файле (т. Е. Я не хочу, чтобы он возвращал NULL, если условия не выполнены)

Комментарии:

1. Это кажется лучшим использованием для case ; кроме того, что вы хотите вернуть, если верно обратное?

2. @ps2goat Ему не нужно ничего возвращать, если в таблице есть совпадение, просто нужно перейти к следующему запросу (не включен в этот пост)

3. Это функция / хранимая процедура или просто стандартный скрипт?

4. @ps2goat стандартный скрипт

Ответ №1:

Добавление в THEN инструкцию RETURN SELECT , если ваша функция plpgsql возвращает одну запись или RETURN QUERY SELECT если ваша функция plpgsql возвращает набор записей, может быть полезным, см. Документацию здесь

 create or replace your_function(your_list_of_parameters)
returns record language plpgsql as
$
declare 
begin 
    if not exists (Select 1 from user.permission where permission_id = 1) then 
    return select 0 as Success, 'No ID exists' as message;
    end if;
end ; $

create or replace your_function(your_list_of_parameters)
returns setof record language plpgsql as
$
declare 
begin 
    if not exists (Select 1 from user.permission where permission_id = 1) then 
    return query select 0 as Success, 'No ID exists' as message;
    end if;
end ; $