アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)
主な内容
--Page 1--
▼ストアドプロシージャとは
▼ストアドプロシージャの新規作成
--Page 2--
▼ストアドプロシージャの更新
▼Management Studioから確認する
▼ストアドプロシージャを削除する
▼まとめ
SQL入門として始まった本連載ですが、今回からはSQLを学ぶうえで最難関といえるストアドプロシージャを取り上げます。これまで学んできたSELECT文などとは異なり、ストアドプロシージャでは一般的なプログラミング知識も求められるため、1つ1つの要素を確認しながら学習を進めていきましょう。
ストアドプロシージャ(STORED PROCEDURE)とは、データベースに対する一連の処理手続きを1つのプログラム(PROCEDURE)にまとめ、リレーショナル・データベース管理システム(以下、RDBMS)に保存(STORED)したものです。1つのストアドプロシージャには複数のSQLを記述することが可能です。また、条件分岐や繰り返しといった制御構文も持つため、単体のSQL文では困難であったさまざまなデータの処理を行うことが可能です。
ストアドプロシージャをRDBMS上に登録することによって、クライアントは呼び出し命令文を実行するだけで処理を実行できます。データベース上に格納されたさまざまなデータを利用するうえで、繰り返し同じ処理を実行するような場合が多々存在します。1日の売り上げを集計する、在庫状況を集計する、といった具合です。このような処理を行いたい場合に、その都度SQLを記述・実行するのではなく、あらかじめストアドプロシージャとして登録しておくことによって、手間や間違いをなくすことが可能です。
ストアドプロシージャはパフォーマンスの観点からも優れた面を持っています。ストアドプロシージャはRDBMSでの実行に適した形に解析・変換されたうえでRDBMSに格納されるため、プログラムの処理パフォーマンスに優れています。また、RDBMS内に格納・実行されるためネットワークやプロセス越えることによるボトルネックが発生しません。
Visual Studio .NETやC#といったプログラム言語を利用することによって、データベースに対する処理を1つのプログラムにまとめることが可能ですが、これらのプログラムはあくまでデータベースやサーバの「外」から実行されるため、ネットワーク環境などにパフォーマンスが左右されてしまいます。従って、大量のデータを一括して処理する必要がある場合などはストアドプロシージャの利用が適しています。
ストアドプロシージャの利点をまとめます。
ストアドプロシージャを記述する言語はSQLのような統一規格にはなっておらず、データベース製品ごとに異なる言語を利用します。OracleではPL/SQL、SQL ServerではTransact-SQL(T-SQL)といった具合です。このため、各社間の互換性は低く、ストアドプロシージャは各社用にそれぞれ実装する必要があります。ここでは、SQL ServerのTransact-SQLを利用したストアドプロシージャの基本構文を取り上げます。
ストアドプロシージャの最も単純な構文は、SQLを実行しその結果を戻す形です。構文は次のような形になります。
CREATE PROCEDURE プロシージャ名
[@パラメータ データ型, ……]
AS
SQLステートメント
それでは早速、SQL Server 2005のサンプルデータベースであるAdventureWorksに次のストアドプロシージャを登録してみましょう。Management Studioより次のTransact-SQLを発行します。
CREATE PROCEDURE uspSamle1 @ID int AS SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = @ID
このストアドプロシージャはパラメータを1つ受け取り、そのパラメータを利用したSELECT文の発行を行っています。パラメータの指定は「@ID int」という部分になります。最初に「@」を付けた形で変数名を定義します。「int」という部分は変数の型を指定しています。型の種類はデータベースの列に指定可能な列の種類と同じです。ストアドプロシージャ内のWHERE句で「ProductID」列との比較を行っていますが、「ProductID」がint型であるため、パラメータもint型に合わせています。
SQL Server上に登録したストアドプロシージャを利用するためには、次の構文を利用します。
EXECUTE プロシージャ名 パラメータ1, パラメータ2 ……
EXECUTEはEXECと書くことも可能です。それでは、先ほど登録した「uspSamle1」を実行し結果を確認してみましょう。
EXEC uspSamle1 879 実行結果 ProductID Name ListPrice 879 All-Purpose Bike Stand 159.00
渡されたパラメータに従ってSELECT文が発行され、その結果が返ってきていることが確認できます。この処理結果の意味としては、次のSELECT文を発行した結果と同じになります。
SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 879
Copyright © ITmedia, Inc. All Rights Reserved.