呼叫sp\ U名称([参数[,…]])呼叫sp\ U名称[()]
呼叫
ステートメントは、以前に创建过程
を使用して定義されたストアドプロシージャーを呼び出します。
引数を取らないストアドプロシージャーは、括弧なしで呼び出すことができます。つまり、呼叫p()
と呼叫p
は同等です。
呼叫
は、出来
または伊努特
パラメータとして宣言されたパラメータを使用して、その呼び出し元に値を返すことができます。そのプロシージャーから戻るとき、クライアントプログラムは、ルーチン内で実行された最後のステートメントで影響を受けた行数を取得することもできます。SQL语句レベルでは、行计数()
関数を呼び出します。C原料药からは、mysql\u受影响的\u行()
関数を呼び出します。
出来
または伊努特
パラメータを使用してプロシージャーから値を取得するには、ユーザー変数を使用してこのパラメータを渡し、そのプロシージャーから戻ったあとに変数の値をチェックします。(そのプロシージャーを別のストアドプロシージャーまたはストアドファンクション内から呼び出している場合は、在里面
または伊努特
パラメータとしてルーチンパラメータまたはローカルルーチン変数を渡すこともできます。)伊努特
パラメータの場合は、プロシージャーに渡す前にその値を初期化してください。次のプロシージャーには、このプロシージャーが現在のサーバーバージョンに設定する出来
パラメータと、このプロシージャーがその現在の値から 1.増分する伊努特
値が含まれています。
创建过程p(OUT ver\u param VARCHAR(25),INOUT incr\u param INT)BEGIN#Set value of OUT parameter SELECT VERSION()INTO ver\u param;#INOUT参数集增量值incr\u param=incr\u param+1;结束;
このプロシージャーを呼び出す前に、伊努特
パラメータとして渡される変数を初期化します。このプロシージャーを呼び出したあと、これらの 2.つの変数の値は設定または変更されています。
mysql>设置@increment=10;mysql>调用p(@version,@increment);mysql>选择@version,@increment;+------------+------------+\@版本|@增量|+----------------+-----------+| 5.5.3-m3-log | 11 |+--------------+------------+
准备
および执行
で使用される準備済み呼叫
ステートメントでは、在里面
パラメータにプレースホルダを使用できます。出来
および伊努特
パラメータの場合、プレースホルダのサポートは MySQL5.5.3版本以降で使用できます。これらの種類のパラメータは、次のように使用できます。
mysql>设置@increment=10;mysql>PREPARE s FROM'CALL p(??)';mysql>使用@version,@increment执行s;mysql>选择@version,@increment;+------------+------------+\@版本|@增量|+----------------+-----------+| 5.5.3-m3-log | 11 |+--------------+------------+
MySQL5.5.3版本より前は、出来
または伊努特
パラメータにプレースホルダのサポートは使用できません。出来
および伊努特
パラメータに対するこの制限を回避するために、プレースホルダの使用は避けてください。代わりに、ユーザー変数を呼叫
ステートメント自体で参照し、执行
ステートメントでは指定しないでください。
mysql>设置@increment=10;mysql>PREPARE s FROM'CALL p(@version,@increment)';mysql>执行s;mysql>选择@version,@increment;+------------+------------+\@版本|@增量|+----------------+-----------+| 5.5.0-m2-log | 11 |+--------------+------------+
呼叫
SQL语句ステートメントを使用して、結果セットを生成するストアドプロシージャーを実行する Cプログラムを記述するには、客户端\u多\u结果
フラグが有効になっている必要があります。これは、各呼叫
によって、プロシージャー内で実行されるステートメントによって返される可能性のある結果セットに加えて、呼び出しステータスを示すための結果が返されるためです。客户端\u多\u结果
は、呼叫
が、準備済みステートメントを含むストアドプロシージャーを実行するために使用される場合にも有効になっている必要があります。このようなプロシージャーがいつロードされるかや、これらのステートメントによって結果セットが生成されるかどうかを特定することはできないため、これらを想定する必要があります。
客户端\u多\u结果
は、mysql\u real\u connect()
を呼び出すときに、客户端\u多\u结果
フラグ自体を渡すことによって明示的に、または客户多对账单
を渡すことによって暗黙的に有効にする (これによって客户端\u多\u结果
も有効になります) ことができます。MySQL5.6版本では、客户端\u多\u结果
はデフォルトで有効にされています。
mysql\u query()
またはmysql\u real\u query()
を使用して実行された呼叫
ステートメントの結果を処理するには、それ以上結果が存在するかどうかを判定するためにmysql\u next\u result()
を呼び出すループを使用してください。例については、セクション23.7.17「複数ステートメント実行の C原料药サポート」を参照してください。
MySQL数据库インタフェースを備える言語で記述されたプログラムの場合は、呼叫
ステートメントからの出来
または伊努特
パラメータの結果を直接取得するためのネイティブメソッドが MySQL5.5.3版本より前には存在しません。これらのパラメータ値を取得するには、呼叫
ステートメントでプロシージャーにユーザー定義変数を渡したあと、选择
ステートメントを実行して変数値を含む結果セットを生成してください。伊努特
パラメータを処理するには、呼叫
の前に、対応するユーザー変数を、プロシージャーに渡される値に設定するステートメントを実行してください。
次の例は、先に説明した、出来
パラメータと伊努特
パラメータを含むストアドプロシージャーP
の手法 (エラーチェックはなし) を示しています。
mysql\u query(mysql,“SET@increment=10”);mysql_query(mysql,“CALL p(@version,@increment)”);mysql\u query(mysql,“SELECT@version,@increment”);result=mysql\u store\u result(mysql);row=mysql\u fetch\u row(结果);mysql\u free\u result(结果);
前のコードが実行されたあと、行[0]
と第[1]行
にはそれぞれ、@版本
と@增量
の値が含まれています。
MySQL5.6版本では、Cプログラムは準備済みステートメントインタフェースを使用して呼叫
ステートメントを実行し、出来
および伊努特
パラメータにアクセスできます。これは、それ以上結果が存在するかどうかを判定するためにmysql\u stmt\u next\u result()
を呼び出すループを使用して呼叫
ステートメントの結果を処理することにより行われます。例については、セクション23.7.20「C APIのプリペアド 呼叫ステートメントのサポート」を参照してください。MySQL数据库インタフェースを備える言語は、準備済み呼叫
ステートメントを使用して、出来
および伊努特
プロシージャーパラメータを直接取得できます。
MySQL5.6.6版本以降では、ストアドプログラムによって参照されるオブジェクトへのメタデータ変更が検出され、そのプログラムが次に実行されときに、影響を受けるステートメントの自動再解析が行われるようになります。詳細については、セクション8.9.4「プリペアドステートメントおよびストアドプログラムのキャッシュ」を参照してください。