A procedure is a database object similar to a function. The key differences are: プロシージャは関数と似たデータベースオブジェクトです。 重要な違いは以下の通りです。
Procedures are defined with
the <link linkend="sql-createprocedure"><command>CREATE
PROCEDURE</command></link> command, not <command>CREATE
FUNCTION</command>.
プロシージャはCREATE FUNCTION
ではなくて、CREATE PROCEDURE
コマンドで定義します。
Procedures do not return a function value; hence <command>CREATE
PROCEDURE</command> lacks a <literal>RETURNS</literal> clause.
However, procedures can instead return data to their callers via
output parameters.
プロシージャは関数値を返しません。ですからCREATE PROCEDURE
にはRETURNS
句がありません。
しかしプロシージャはその代わりに出力パラメータを通じて呼び出し元にデータを返すことができます。
While a function is called as part of a query or DML command, a
procedure is called in isolation using
the <link linkend="sql-call"><command>CALL</command></link> command.
関数が問い合わせやDMLコマンドの一部として呼び出されるのに対し、プロシージャはCALL
コマンドを使って独立して呼び出されます。
A procedure can commit or roll back transactions during its
execution (then automatically beginning a new transaction), so long
as the invoking <command>CALL</command> command is not part of an
explicit transaction block. A function cannot do that.
起動したCALL
コマンドが明示的なトランザクションブロックの一部でない限り、プロシージャは実行中にトランザクションをコミットあるいはロールバックできます(そして自動的に新しいトランザクションを開始します)。
関数はそれができません。
Certain function attributes, such as strictness, don't apply to procedures. Those attributes control how the function is used in a query, which isn't relevant to procedures. たとえば厳密性(strictness)のようなある種の関数の性質はプロシージャには適用されません。 これらは問い合わせの中で関数がどのように使われるかを制御する性質であり、プロシージャには関係ありません。
The explanations in the following sections about how to define user-defined functions apply to procedures as well, except for the points made above. 次節を含む以降の節で説明するユーザ定義関数の定義方法は、上で述べた点を除けばプロシージャにも当てはまります。
Collectively, functions and procedures are also known
as <firstterm>routines</firstterm><indexterm><primary>routine</primary></indexterm>.
There are commands such as <link linkend="sql-alterroutine"><command>ALTER ROUTINE</command></link>
and <link linkend="sql-droproutine"><command>DROP ROUTINE</command></link> that can operate on functions and
procedures without having to know which kind it is. Note, however, that
there is no <literal>CREATE ROUTINE</literal> command.
関数とプロシージャは、ひとまとめにルーチンとも言われます。
関数とプロシージャを区別することなしに操作できるALTER ROUTINE
やDROP ROUTINE
などのコマンドがあります。
しかしながら、CREATE ROUTINE
コマンドは無いことに注意してください。