プロシージャは関数と似たデータベースオブジェクトです。 重要な違いは以下の通りです。
プロシージャはCREATE FUNCTION
ではなくて、CREATE PROCEDURE
コマンドで定義します。
プロシージャは関数値を返しません。ですからCREATE PROCEDURE
にはRETURNS
句がありません。
しかしプロシージャはその代わりに出力パラメータを通じて呼び出し元にデータを返すことができます。
関数が問い合わせやDMLコマンドの一部として呼び出されるのに対し、プロシージャはCALL
コマンドを使って独立して呼び出されます。
起動したCALL
コマンドが明示的なトランザクションブロックの一部でない限り、プロシージャは実行中にトランザクションをコミットあるいはロールバックできます(そして自動的に新しいトランザクションを開始します)。
関数はそれができません。
たとえば厳密性(strictness)のようなある種の関数の性質はプロシージャには適用されません。 これらは問い合わせの中で関数がどのように使われるかを制御する性質であり、プロシージャには関係ありません。
次節を含む以降の節で説明するユーザ定義関数の定義方法は、上で述べた点を除けばプロシージャにも当てはまります。
関数とプロシージャは、ひとまとめにルーチンとも言われます。
関数とプロシージャを区別することなしに操作できるALTER ROUTINE
やDROP ROUTINE
などのコマンドがあります。
しかしながら、CREATE ROUTINE
コマンドは無いことに注意してください。