データベース千夜一夜第28回

ストアドプロシージャ(2)~引数を伴う処理と値を返す処理 長谷川裕行
有限会社 手國堂

引数を伴うストアドプロシージャ

ストアドプロシージャには引数を与えることもできます。引数を受け取って処理をするストアドプロシージャを作ってみましょう。


- 引数の宣言 -

引数を受け取るストアドプロシージャを追加するには、以下のような書式を用います。

  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つしか与えていなくても同じです。





トップページ
テーブルの転記と削除
引数を伴うストアドプロシージャ
引数の宣言
引数をWHERE句の条件に充てる
ストアドプロシージャの実行
値を返すストアドプロシージャ
あとがき
Copyright © GrapeCity inc. All rights reserved.