[+/-]
ストアドルーチンはプロシージャかファンクションのいずれかです。ストアドルーチンはCREATE
PROCEDURE
およびCREATE
FUNCTION
ステートメントを使って作成されます。プロシージャはCALL
ステートメントを使って起動し、アウトプット変数を使ってのみ値を返すことができます。関数(ファンクション)は(関数名を呼び出す方法を採用している)他の関数のように、ステートメントの内側から呼び出して、スカラー値を返すことができます。ストアドルーチンは他のストアドルーチンを呼び出すことができます。
ストアドプロシージャもしくはファンクションは特定データベースに関連します。これは複数の意味を含んでいます。
ルーチンを呼び出すと、必然的に USE
が実行されます(ルーチンの実行が終了すると停止します)。ストアドルーチンの中でdb_name
USE
ステートメントの使用は禁止されています。
データベース名を使ってルーチン名を認定することができます。これは現在データベース中に含まれていないルーチンを参照するのに使用することができます。例えば、test
データベースに関連するストアドプロシージャ
p
またはファンクション
f
を呼び出すため、CALL
test.p()
またはtest.f()
とするとができます。
データベースを撤去すると、それに関連する一切のストアドルーチンも撤去されます。
MySQLは、ストアドプロシージャの中に含まれるレギュラーSELECT
ステートメントの(カーソルまたはローカル変数なしで)の使用を可能にする非常に有用な拡張機能をサポートしています。このようなクエリーに対する結果セットは、簡単に直接クライアントに送られます。複数のSELECT
ステートメントは複数の結果セットを生成するので、クライアントは複数の結果セットをサポートしているMySQLクライアント・ライブラリーを使用しなければなりません。これは、クライアントは少なくとも4.1より新しいバージョンのMySQLから取得したクライアント・ライブラリーを使用しなければならないことを意味します。クライアントは接続時、CLIENT_MULTI_RESULTS
オプションも特定しなければなりません。Cプログラムに対しては、mysql_real_connect()
C
API関数を使って実施することができます。項23.2.3.52. 「mysql_real_connect()
」、項23.2.9. 「マルチプルステートメントを実行するC
APIハンドリング」
を参照して下さい。
以下のセクションでは、ストアドプロシージャとファンクションを生成、変更、並びに起動を実行するのに使用する構文について説明します。