関数を呼び出すデフォルトの方法はselect * from my_function()
ですか?
何も返さず、テーブルにデータを挿入するだけの関数を作成し、(SQL Serverのバックグラウンドから)_select * from...
_で呼び出すのは奇妙に「感じる」からです。
私はexec my_function()
のようなものを期待していました
PERFORM
ステートメントを使用します- http://www.postgresql.org/docs/current/static/plpgsql-statements.html
たとえば、副作用はあるが有用な結果値を持たない関数を呼び出す場合など、式またはSELECTクエリを評価して結果を破棄することが役立つ場合があります。 PL/pgSQLでこれを行うには、PERFORMステートメントを使用します
だからそれはただ
DO $$ BEGIN
PERFORM my_function();
END $$;
PostgreSQL 11 真のストアドプロシージャをサポート @AbdisamadKhalifによって指摘されています。手続き内トランザクション制御をサポートします。
はい、それは標準的な方法であり、はい、それは奇妙です。
通常、ストアドプロシージャなどの関数を記述し、CALL
またはEXECUTE
コマンドで呼び出します。 PostgreSQLは真のストアドプロシージャ(複数の結果セット、自律型トランザクションなど)をサポートしませんが、sql呼び出し可能なユーザー定義関数のみをサポートします。
そのため、回避策は、FROM
を省略したPostgreSQL拡張構文を使用するSELECT function_name()
、または(多少)より標準的なSELECT 1 FROM function_name();
です。
ODBCドライバー、JDBCドライバーなど)は、{call func_name()}
エスケープ構文を理解し、基になるSELECT
に自動的に変換します。
関数がセットを返すときは、from
を使用します。関数がvoid
を返したら
select my_function();