#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 ; $