Подтвердить что ты не робот

Как написать хранимую процедуру postgres, которая ничего не возвращает?

Как написать простую хранимую процедуру в postgres, которая вообще не возвращает значение? Даже с типом возврата void, когда я вызываю хранимую процедуру, я получаю одну строку назад.

CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
   DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
4b9b3361

Ответ 1

Это не функция, возвращающая значение, это SELECT, которую вы использовали для ее вызова. Если он не возвращает никаких строк, он не запускает вашу функцию.

Ответ 2

Вы можете добиться "ничего не возвращаемого", злоупотребляя функциями возврата:

Простая функция:

create function x () returns setof record as $$
begin
return;
END;
$$ language plpgsql;

Теперь вы можете:

# select x();
 x
---
(0 rows)

Если это не работает для вас (извините, я использую 8.5), попробуйте с этим подходом:

# create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$
begin
return;
END;
$$ language plpgsql;
CREATE FUNCTION

Параметры неактуальны, но:

  • Вам нужно > 1 из них
  • Их нужно называть

И теперь вы можете:

# select * from x();
 o1 | o2
----+----
(0 rows)

Ответ 3

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

Результат строки равен NULL, поэтому он возвращает void.

Я не думаю, что вы можете что-то сделать. Проверка моих функций void все они такие же, как и ваши.

возвращает void как $$ и не возвращает оператор в блоке кода.