ストアド プロシージャの使用
ストアド プロシージャを使用するには、その実行 (実行) 方法を知っている必要があります。ストアド プロシージャの実行はその定義よりもはるかに頻繁に行われるため、ストアド プロシージャの実行から始めます。次に、ストアド プロシージャの作成と使用について紹介します。 ストアド プロシージャを実行する
MySQL ではストアド プロシージャの実行を呼び出しと呼ぶため、MySQL がストアド プロシージャを実行するために使用するステートメントは CALL です。 CALL は、ストアド プロシージャの名前と、それに渡す必要があるパラメータを受け入れます。次の例を見てください:
入力:
call productpricing(@pricelow,@pricehigh,@priceaverage);
ログイン後にコピー
分析: その中で、productpricing という名前のストアド プロシージャが実行され、製品の最小価格、最大価格、平均価格を計算して返します。
後で説明するように、ストアド プロシージャでは結果を表示することも、表示しないこともできます。
ストアド プロシージャの作成
前述したように、ストアド プロシージャの作成は簡単な問題ではありません。このプロセスを理解するために、製品の平均価格を返すストアド プロシージャの例を考えてみましょう。そのコードは次のとおりです:
入力:
create procedure productpricing() begin select avg(prod_price) as priceaverage from products;end;
ログイン後にコピー
分析: 最初と最後のステートメントについては後で説明します。このストアド プロシージャは productpricing という名前で、CREATE PROCEDURE productpricing() ステートメントで定義されます。ストアド プロシージャがパラメーターを受け入れる場合、それらは () 内に列挙されます。このストアド プロシージャにはパラメータがありませんが、次の () が必要です。 BEGIN ステートメントと END ステートメントはストアド プロシージャ本体を修飾するために使用されます。ストアド プロシージャ本体自体は (Avg() 関数を使用した) 単なる単純な SELECT ステートメントです。
MySQL がこのコードを処理すると、新しいストアド プロシージャ product-pricing が作成されます。このコードはストアド プロシージャを呼び出さないため、データは返されません。単に後で使用するために作成されるだけです。
mysql コマンド ライン クライアントの区切り文字 mysql コマンド ライン ユーティリティを使用している場合は、この説明を注意深く読む必要があります。
デフォルトの MySQL ステートメント区切り文字は ; です (これまでに使用した MySQL ステートメントですでに見たように)。 mysql コマンド ライン ユーティリティでは、ステートメント区切り文字として ; も使用されます。コマンド ライン ユーティリティがストアド プロシージャ自体内で ; 文字を解釈すると、それらはストアド プロシージャのコンポーネントとして扱われず、ストアド プロシージャ内の SQL で構文エラーが発生します。
解決策は、コマンド ライン ユーティリティのステートメント区切り文字を次のように一時的に変更することです:
delimiter//
create procedure productpricing()
begin
select avg(prod_price) as priceaverage from products;
end //
delimiter;
ログイン後にコピー
ここで、 DELIMITER // は、格納されているフラグに見られるように、 // を新しいステートメント終了区切り文字として使用するようにコマンド ライン ユーティリティに指示します。プロシージャ 終了 END は、END; ではなく END// として定義されます。こうすることで、ストアド プロシージャ本体内の ; はそのまま残り、データベース エンジンに正しく渡されます。最後に、元のステートメント区切り文字に戻すには、 DELIMITER ; を使用します。記号を除く任意の文字をステートメント区切り文字として使用できます。
mysql コマンドライン ユーティリティを使用している場合は、この章を読むときにこの点に留意してください。
それでは、このストアド プロシージャをどのように使用するのでしょうか?以下に示すように:
入力:
call productpricing();
ログイン後にコピー
出力:
分析: CALL productpricing(); 作成したばかりのストアド プロシージャを実行し、返された結果を表示します。ストアド プロシージャは実際には関数であるため、ストアド プロシージャ名の後に () 記号が必要です (パラメータが渡されない場合でも)。
以上がMySQL ストアド プロシージャの使用、実行、作成に関するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。