10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


20.2.1ストアドルーチンの構文

ストアドルーチンはプロシージャーまたは関数のどちらかです。ストアドルーチンは,创建过程および创建函数ステートメントで作成されます(セクション13.1.15“创建过程および创建函数構文”を参照してください)。プロシージャーは调用ステートメントを使用して呼び出され(セクション13.2.1“叫構文”を参照してください),出力変数の使用でのみ値を戻すことができます。関数は,ほかの関数とまったく同様に(つまり,関数の名前を呼び出すことによって)ステートメント内部から呼び出すことができ,スカラー値を戻すことができます。ストアドルーチンの本体では,複合ステートメントを使用できます(セクション13.6”MySQL複合ステートメント構文”を参照してください)。

ストアドルーチンは,下降过程および删除函数ステートメントで削除でき(セクション13.1.26“DROP PROCEDUREおよび下降函数構文”を参照してください),改变的过程および改变函数ステートメントで変更できます(セクション13.1.5“改变程序構文”を参照してください)。

ストアドプロシージャーまたはストアドファンクションは,特定のデータベースに関連付けられています。これにはいくつかの問題があります。

  • ルーチンが呼び出されると,暗黙の使用db_nameが実行されます(その後,ルーチンが終了すると元に戻ります)。ストアドルーチン内での使用ステートメントは許可されていません。

  • データベース名でルーチン名を修飾できます。これは現在のデータベースに存在しないルーチンを参照する場合に使用できます。たとえば,测试データベースに関連するストアドプロシージャーpまたはストアドファンクションfを呼び出すには,调用test.p ()またはtest.f ()と指定します。

  • データベースを削除すると,そのデータベースに関連付けられたすべてのストアドルーチンも削除されます。

ストアドファンクションは再帰関数にはできません。

ストアドプロシージャーでの再帰は許可されていますが,デフォルトでは無効になっています。再帰を有効にするには,max_sp_recursion_depthサーバーシステム変数を正の値に設定します。ストアドプロシージャーの再帰により,スレッドスタック領域の要求が増加します。max_sp_recursion_depthの値を増やした場合,サーバー起動時にthread_stackの値を増やすことによってスレッドスタックサイズを増やすことが必要な場合もあります。詳細は,セクション5.1.4”サーバーシステム変数”を参照してください。

MySQLでは,通常の选择ステートメントをストアドプロシージャー内で(つまり,カーソルまたはローカル変数を使用せずに)使用できるようにする非常に役立つ拡張をサポートしています。このようなクエリーの結果セットは単にクライアントに直接送信されます。複数の选择ステートメントは複数の結果セットを生成するので,クライアントは複数の結果セットをサポートしているMySQLクライアントライブラリを使用する必要があります。これは,クライアントが,4.1以降のMySQLのバージョンからクライアントライブラリを使用する必要があることを意味します。クライアントは,接続するときに,CLIENT_MULTI_RESULTSオプションも指定する必要があります。Cプログラムの場合,これは,mysql_real_connect ()C API関数で実行できます。セクション23.7.7.53”mysql_real_connect ()およびセクション23.7.17”複数ステートメント実行のC APIサポート”を参照してください。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb