ストアドプロシージャでの条件分岐の使い方

SQLにおけるストアドプロシージャは、プリコンパイルされたSQLステートメントの集合体であり、効率的なデータベース操作を可能にします。特に、条件分岐を用いることで、柔軟なロジックを実装することができます。この記事では、ストアドプロシージャでの条件分岐の基本的な使い方を、具体的な例とともに詳しく解説します。

目次

ストアドプロシージャとは

ストアドプロシージャは、SQL Server、MySQL、Oracleなど、多くのリレーショナルデータベース管理システム(RDBMS)でサポートされています。一連のSQL命令をまとめて保存し、呼び出すことができる機能です。これにより、コードの再利用性が向上し、メンテナンスも容易になります。

条件分岐の基本

ストアドプロシージャ内で条件分岐を用いることで、特定の条件下で異なる処理を行うことができます。SQLにおける条件分岐には主に「IF…ELSE」や「CASE」があります。

IF…ELSE

IF…ELSE文は、条件が真か偽かによって、異なるSQLステートメントを実行します。

DELIMITER //
CREATE PROCEDURE SimpleIfElse(IN input INT)
BEGIN
  IF input > 0 THEN
    SELECT 'Input is greater than 0';
  ELSE
    SELECT 'Input is less than or equal to 0';
  END IF;
END;
//
DELIMITER ;

CASE

CASE文は、複数の条件を指定できるため、より複雑な条件分岐が可能です。

DELIMITER //
CREATE PROCEDURE SimpleCase(IN input INT)
BEGIN
  CASE 
    WHEN input > 0 THEN
      SELECT 'Input is greater than 0';
    WHEN input = 0 THEN
      SELECT 'Input is zero';
    ELSE
      SELECT 'Input is less than 0';
  END CASE;
END;
//
DELIMITER ;

条件分岐の具体的な使い方

在庫管理の例

条件分岐を用いて、在庫管理のロジックを実装する例を見てみましょう。

商品ID商品名在庫数
1りんご50
2バナナ30
3オレンジ20
テーブル名称1: 商品と在庫数

ストアドプロシージャを使って、在庫数に応じて注文処理を行うロジックを考えます。

DELIMITER //
CREATE PROCEDURE CheckInventory(IN product_id INT)
BEGIN
  DECLARE stock INT;
  
  SELECT stock_quantity INTO stock FROM inventory WHERE id = product_id;
  
  IF stock > 20 THEN
    UPDATE inventory SET stock_quantity = stock - 1 WHERE id = product_id;
    SELECT '注文完了';
  ELSE
    SELECT '在庫不足';
  END IF;
END;
//
DELIMITER ;

このストアドプロシージャは、在庫数が20以上の場合は注文を受け付け、在庫を1減らします。それ以外の場合は、「在庫不足」と返します。

まとめ

ストアドプロシージャにおける条件分岐は、データベース処理を柔軟に制御する強力な手段です。この記事で解説した「IF…ELSE」や「CASE」を使いこなすことで、効率的かつ複雑なデータベース処理が可能になります。具体的な例を通じて、その使い方と可能性を探ってみてください。

コメント

コメントする

目次