私は以下の違いを理解しています:
SQL Serverでは、「ストアドプロシージャ」はEXEC
を通じて許可されます。 SELECT
を返すNULL
で実行される他の関数に比べて何が提供されますか?
PostgreSQLがストアドプロシージャを取得すると、何がもたらされますか?また、関数と仕様内のストアドプロシージャの間にある場合、正式な違いは何ですか?
私は読みます この質問ですが、実装の発表より前のようです
Postgresfunctions( CREATE FUNCTION
)only(単一の)トランザクションコンテキストで実行します。いくつかの重要なコマンドは関数本体内で実行されます。お気に入り CREATE DATABASE
またはCREATE INDEX CONCURRENTLY
またはVACUUM
。 マニュアル:
VACUUM
はトランザクションブロック内では実行できません。
関数は「ストアドプロシージャ」と呼ばれることが多く、これは常に誤解を招く用語でした-おそらく他のRDBMSから引き継がれています。 SQLプロシージャ( CREATE PROCEDURE
)Postgres 11では、誤称は完全に回避されるべきです。
SQLプロシージャーは、トランザクションを開始および終了できます。 しかし、上記のコマンドはトランザクションブロック内ではまったく許可されないため、SQLプロシージャに含めることはできません(まだ)。
複数の結果セットが将来計画されていますが、まだ実装されていません。
関連:
PostgreSQL関数はトランザクションを開始または終了できません。呼び出し元のクエリから継承したトランザクションでスタックします。
PostgreSQLがストアドプロシージャを取得すると、トランザクションを開いたり閉じたりできるようになります。
も参照してください、