Ответ 1
Это не функция, возвращающая значение, это SELECT
, которую вы использовали для ее вызова. Если он не возвращает никаких строк, он не запускает вашу функцию.
Как написать простую хранимую процедуру в postgres, которая вообще не возвращает значение? Даже с типом возврата void, когда я вызываю хранимую процедуру, я получаю одну строку назад.
CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
Это не функция, возвращающая значение, это SELECT
, которую вы использовали для ее вызова. Если он не возвращает никаких строк, он не запускает вашу функцию.
Вы можете добиться "ничего не возвращаемого", злоупотребляя функциями возврата:
Простая функция:
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
Параметры неактуальны, но:
И теперь вы можете:
# select * from x();
o1 | o2
----+----
(0 rows)
Вы все прекрасно. Вам не нужно ничего добавлять.
Результат строки равен NULL, поэтому он возвращает void.
Я не думаю, что вы можете что-то сделать. Проверка моих функций void все они такие же, как и ваши.
возвращает void как $$ и не возвращает оператор в блоке кода.