[+/-]
ストアドルーチンはプロシージャかファンクションのいずれかです。ストアドルーチンはCREATE
PROCEDUREおよびCREATE
FUNCTIONステートメントを使って作成されます。プロシージャはCALLステートメントを使って起動し、アウトプット変数を使ってのみ値を返すことができます。関数(ファンクション)は(関数名を呼び出す方法を採用している)他の関数のように、ステートメントの内側から呼び出して、スカラー値を返すことができます。ストアドルーチンは他のストアドルーチンを呼び出すことができます。
ストアドプロシージャもしくはファンクションは特定データベースに関連します。これは複数の意味を含んでいます。
ルーチンを呼び出すと、必然的に USE
が実行されます(ルーチンの実行が終了すると停止します)。ストアドルーチンの中でdb_nameUSEステートメントの使用は禁止されています。
データベース名を使ってルーチン名を認定することができます。これは現在データベース中に含まれていないルーチンを参照するのに使用することができます。例えば、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ハンドリング」
を参照して下さい。
以下のセクションでは、ストアドプロシージャとファンクションを生成、変更、並びに起動を実行するのに使用する構文について説明します。
