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

Вызов функций с помощью exec вместо выбора

Является ли способ по умолчанию для вызова функции select * from my_function()?

Я спрашиваю, потому что я создал функцию, которая ничего не возвращает, просто вставляет данные в таблицу и (исходя из фона SQL Server), она "чувствует" странно, чтобы называть ее select * from...

Я ожидал чего-то вроде exec my_function()

4b9b3361

Ответ 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();