Вызов функций с помощью exec вместо выбора
Является ли способ по умолчанию для вызова функции select * from my_function()
?
Я спрашиваю, потому что я создал функцию, которая ничего не возвращает, просто вставляет данные в таблицу и (исходя из фона SQL Server), она "чувствует" странно, чтобы называть ее select * from...
Я ожидал чего-то вроде exec my_function()
Ответы
Ответ 1
использовать оператор PERFORM
- http://www.postgresql.org/docs/current/static/plpgsql-statements.html
Иногда полезно оценивать выражение или запрос SELECT, но отбросить результат, например, при вызове функции, которая имеет побочные эффекты, но не полезное значение результата. Для этого в PL/pgSQL используйте оператор PERFORM
так что просто
DO $$ BEGIN
PERFORM my_function();
END $$;
Ответ 2
Да, это стандартный способ, и да, это странно.
Обычно вы должны записывать такие функции, как хранимые процедуры, и вызывать их с помощью команды CALL
или EXECUTE
. PostgreSQL не поддерживает истинные хранимые процедуры (несколько наборов результатов, автономные транзакции и все такое), хотя только пользовательские функции, определяемые sql.
Итак, обходной путь к SELECT function_name()
с использованием синтаксиса расширения PostgreSQL, который опускает FROM
или SELECT 1 FROM function_name();
, чтобы быть (несколько) более стандартным.
Драйвер ODBC, драйвер JDBC и т.д. понимают синтаксис {call func_name()}
escape и автоматически переводят его в базовый SELECT
.
Ответ 3
Вы будете использовать from
, когда функция вернет набор. Если функция возвращает void
, просто выполните
select my_function();