Как написать хранимую процедуру postgres, которая ничего не возвращает? - PullRequest
12 голосов
/ 28 августа 2009

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

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

Ответы [ 3 ]

7 голосов
/ 28 августа 2009

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

6 голосов
/ 28 августа 2009

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

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

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)
5 голосов
/ 28 августа 2009

У тебя все хорошо. Вам не нужно ничего добавлять.

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

Не думаю, что с этим можно что-то сделать. Проверяя мои пустые функции, они все как твои.

возвращает void как $$, а оператор возврата в блоке кода отсутствует.

...