SQL 速習チュートリアル

SQL ストアドプロシージャ

1. ストアドプロシージャ(Stored Procedure)とは?

ストアドプロシージャとは、保存して再利用できる事前コンパイル(Precompiled)された SQL コードのことです。

何度も繰り返し記述するような SQL クエリがある場合、それをストアドプロシージャとして保存しておけば、次回からはそのプロシージャを呼び出すだけで実行可能になります。

また、ストアドプロシージャにはパラメータ(Parameters)を渡すことができるため、渡されたパラメータ値に基づいて動的に処理を行うことができます。

2. ストアドプロシージャの主なメリット

ストアドプロシージャはデータベース管理において広く利用されており、以下のようなメリットがあります。

  • コードの再利用性(Code Reusability): 同じプロシージャをさまざまなアプリケーションから呼び出すことができます。
  • パフォーマンスの向上(Improved Performance): ストアドプロシージャは事前コンパイルされているため、実行速度が向上します。
  • データベースのセキュリティ(Database Security): 特定のプロシージャを実行する権限をユーザーに設定できるため、テーブルへの直接的なアクセスを制限できます。
  • メンテナンスの容易さ(Easy Maintenance): プロシージャを更新するだけで、それを利用しているすべての箇所に自動的に変更が反映されます。

3. ストアドプロシージャの構文 (SQL Server)

ストアドプロシージャを作成するには、CREATE PROCEDURE 文を使用します。

CREATE PROCEDURE プロシージャ名
  @パラメータ1 データ型,
  @パラメータ2 データ型
AS
BEGIN
  -- 実行される SQL ステートメント
  SELECT カラム1, カラム2
  FROM テーブル名
  WHERE カラムN = @パラメータN;
END;

       Tips: MySQL データベースの構文については、「MySQL Stored Procedures」を参照してください。

4. ストアドプロシージャの実行

ストアドプロシージャを実行するには、EXEC 文を使用します。

EXEC プロシージャ名 @パラメータ1 = '値1', @パラメータ2 = '値2';

5. ストアドプロシージャの削除

ストアドプロシージャを削除するには、DROP PROCEDURE 文を使用します。

DROP PROCEDURE プロシージャ名;

Tips: プロシージャが存在しない場合にエラーが返されないようにするには、IF EXISTS 句を追加します。
DROP PROCEDURE IF EXISTS プロシージャ名;

6. デモ用データベース

以下は、Northwind サンプルデータベースの「Customers(顧客)」テーブルからの抜粋です。

CustomerID CustomerNameContactName Address CityPostalCode Country
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK

7. ストアドプロシージャの使用例

次の SQL は、「Customers」テーブルから特定の「City(市区町村)」の顧客を選択するために使用できる、GetCustomersByCity という名前のストアドプロシージャを作成します。

作成例:

CREATE PROCEDURE GetCustomersByCity
  @City nvarchar(50)
AS
BEGIN
  SELECT * FROM Customers
  WHERE City = @City;
END;

次に、このストアドプロシージャにパラメータとして都市名('London')を渡して実行します。プロシージャは「Customers」テーブルから該当する詳細情報を返します。

実行例:

EXEC GetCustomersByCity @City = 'London';

8. 複数パラメータを持つストアドプロシージャ

複数のパラメータを追加するのも簡単です。以下のように、各パラメータとそのデータ型をカンマで区切って記述します。

次の SQL は、「Customers」テーブルから「特定の City(市区町村)」かつ「特定の PostalCode(郵便番号)」の顧客を選択するストアドプロシージャを作成します。

作成例:

CREATE PROCEDURE GetCustomersByCity
  @City nvarchar(50),
  @PostalCode nvarchar(10)
AS
BEGIN
  SELECT * FROM Customers
  WHERE City = @City AND PostalCode = @PostalCode;
END;

作成したストアドプロシージャを以下のように実行します。

実行例:

EXEC GetCustomersByCity @City = 'London', @PostalCode = 'WA1 1DP';