ストアドプロシージャには引数を与えることもできます。引数を受け取って処理をするストアドプロシージャを作ってみましょう。
- 引数の宣言 -
引数を受け取るストアドプロシージャを追加するには、以下のような書式を用います。
Create Procedure <名前>
@<引数1> <データ型>, @<引数2> <データ型> ...
As
<処理>
引数の名前には先頭に@を付け、それに続けて必ずデータ型(データベース・エンジンで規定されている型)を指定します。複数の引数を用いる場合には、引数とデータ型の記述を「,」で区切って列挙します。
- 引数をWHERE句の条件に充てる -
「商品ID」を引数に取り、テーブル「商品_mr」から商品IDに該当する商品のレコードを抽出して商品名を表示する処理“GetItemName1”を作ってみましょう。以下のようになります(ex03.sql)。
Create Procedure GetItemName1
@ItemId int -------------------------- 引数を宣言
As
SELECT 商品ID, 品名 FROM 商品_mr
WHERE 商品ID = @ItemId --------------- 引数をSQLの条件式に用いる
引数名は“@ItemId”でint型とします。これをSQLのSELECT命令でWHERE句による条件式に与えることで、ストアドプロシージャの実行時に引数として与えた商品IDに該当するレコードが抽出されます。
引数の@ItemIdをint型としたのは、テーブル「商品_mr」の「商品ID」がint型であるためです。WHERE句の条件式で比較するフィールドと値との型が異なると、SQLの実行時にエラーとなります。
- ストアドプロシージャの実行 -
引数を取るストアドプロシージャを実行するには、EXECUTE命令に続くストアドプロシージャ名の後ろに引数を記述します。
「商品ID=36221」の商品名を表示させてみましょう。以下のようにします。
EXECUTE GetItemName1 36221
実行すると、画面9のように結果グリッドに「商品ID=36221/品名=お好み焼きセット」と表示されます。
引数を取るストアドプロシージャを実行する場合、引数を省略することはできません。引数を省略すると、上記の“GetItemName1”なら以下のようなエラーメッセージが表示され、ストアドプロシージャは実行されないので注意しましょう。
プロシージャ 'GetItemName1' には
パラメータ '@ItemId' を指定してください。
引数を2つ取る場合に1つしか与えていなくても同じです。
|
|
|