スマート ストアド プロシージャを構築する
これまでに使用したストアド プロシージャはすべて、基本的に MySQL の単純な SELECT ステートメントをカプセル化したものです。これらはすべてストアド プロシージャの有効な例ですが、これらのカプセル化されたステートメントを使用して直接実行できることの多くは実行されます (テーブルにさらに何かを追加すると、事態がさらに複雑になります)。ストアド プロシージャの威力は、ストアド プロシージャにビジネス ルールとインテリジェントな処理が含まれる場合にのみ真に明らかになります。
このシナリオを考えてみましょう。以前と同じ注文合計を取得する必要がありますが、特定の顧客 (おそらくあなたの州の顧客) に対してのみ、合計に消費税を追加する必要があります。次に、次のことを行う必要があります:
1. 合計を取得します (前と同じ)。
2. 合計に条件付きで消費税を追加します。
ストアド プロシージャの完全な作業は次のとおりです:
入力:
-- Name:ordertotal -- Parmeters:onumber = order number -- taxable = 0 if not taxable -- ototal = order total variable create procedure ordretotal( in onumber int, in taxable boolean, out ototal decimal(8,2) )comment 'obtain order total,optiomally adding tax' begin -- dexlare variable for total declare total decimal(8,2); -- delcare tax percentage declare taxtate int default 6; -- get the ordertotal select sum(item_price*quantity) from orderitems where order_num = onumber into total; -- is this taxable? if taxable then -- yes,so add taxrate to the total select total+(total/100*taxrate) into total; end if; -- and finally,save to out variable select total into ototal; end;
分析: このストアド プロシージャには多くの変更があります。まず、コメントを追加します (-- を前に置きます)。ストアド プロシージャが複雑になるにつれて、これは特に重要になります。追加のパラメータ Taxable が追加されました。これはブール値です (税金が増加する場合は true、それ以外の場合は false)。ストアド プロシージャ本体では、DECLARE ステートメントを使用して 2 つのローカル変数が定義されます。 DECLARE では変数名とデータ型を指定する必要があり、オプションのデフォルト値もサポートしています (この例の税率のデフォルトは 6% に設定されています)。 SELECT ステートメントは、その結果が ototal ではなく total (ローカル変数) に格納されるように変更されました。 IF ステートメントは、課税対象が true であるかどうかを確認し、そうである場合は、別の SELECT ステートメントを使用して消費税をローカル変数 total に追加します。最後に、別の SELECT ステートメントを使用して、 total (消費税が増加する場合と増加しない場合があります) を total に保存します。
COMMENT キーワード この例のストアド プロシージャには、CREATE PROCEDURE ステートメントに COMMENT 値が含まれています。必須ではありませんが、指定すると SHOW PROCEDURE STATUS の結果に表示されます。これは明らかに、より高度で強力なストアド プロシージャです。これをテストするには、次の 2 つのステートメントを使用します。
入力:
call ordertotal(20005,0,@total); select @total;
出力:
入力:
call ordertotal(20005,1,@total); select @total;
出力:
分析: BOOLEAN 値は true の場合は 1 として指定され、0 として指定されます。 false (実際には、ゼロ以外の値はすべて true とみなされ、0 のみが false とみなされます)。中間の引数に 0 または 1 を指定することで、条件付きで注文合計に消費税を追加できます。
IF ステートメント この例では、MySQL の IF ステートメントの基本的な使用法を示します。 IF ステートメントは、ELSEIF 句と ELSE 句もサポートします (前者は THEN 句も使用しますが、後者は使用しません)。 IF (および他のフロー制御ステートメント) の他の使用法については、今後の章で説明します。
ストアドプロシージャの作成に使用されるCREATEステートメントを表示するには、SHOW CREATE
PROCEDUREステートメントを使用します:
Enter:
show create procedure ordetotal;
いつ、誰によって行われたかを含む情報を取得するには詳細情報を含むストアド プロシージャのリストについては、SHOW PROCEDURE STATUS を使用してください。
プロセス ステータスの結果を制限する SHOW PROCEDURE STATUS は、すべてのストアド プロシージャを一覧表示します。出力を制限するには、LIKE を使用してフィルタ モードを指定します。例:
show プロシージャ ステータス like 'ordertotal';
以上がMySQL ストアド プロシージャ - スマート ストアド プロシージャの作成とストアド プロシージャの確認の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。