3.2.2.4. 埋込型SQL

1. 概要

 埋込型SQL(Embedded SQL)は、ホスト言語(C、COBOLなど)のプログラム中にSQL文を直接埋め込む技術です。これにより、アプリケーションロジックとデータベース操作を一体化し、コードの可読性や保守性を高めることができます。さらに、データベースアクセスの効率性を向上させるため、大量のデータ処理が必要なアプリケーション開発において重要な役割を果たします。埋込型SQLは、金融システムや在庫管理システム、航空予約システムなど、さまざまな業界で活用されています。

2. 詳細説明

2.1. カーソル操作

 カーソルは、データベース内の複数の行を順次処理するための仕組みで、埋込型SQLにおいて重要な役割を担います。カーソルを使用することで、大量のデータを効率的に処理し、データベースとアプリケーションの間で柔軟なデータ操作を実現できます。埋込型SQLでのカーソル操作には以下のステップがあります:

  1. カーソルの宣言:処理対象となる行セットを定義します。例として、特定の部門に所属する従業員のデータを抽出するクエリを定義できます。
  2. カーソルのオープン:宣言されたカーソルを使用可能な状態にし、定義されたクエリを実行します。
  3. フェッチ:カーソルを使って1行ずつデータを読み込み、アプリケーション内で操作します。
  4. カーソルのクローズ:カーソルの使用を終了し、リソースを解放します。

2.2. 非カーソル操作

 非カーソル操作は、単一のSQL文で複数の行を一括して処理する方法です。これには、INSERT、UPDATE、DELETEなどの操作が含まれます。例えば、大量の顧客データを一度に追加したり、条件に基づいて複数のレコードを更新する場合に使用されます。

2.3. 親言語との接続

 埋込型SQLでは、ホスト言語とデータベース間でデータをやり取りするためにホスト変数を使用します。ホスト変数は、SQL文とホスト言語の間のデータを結びつけ、効率的なデータ操作を実現します。これにより、データベース操作とアプリケーションロジックを密接に統合することができ、柔軟で効率的なシステムを構築することが可能です。

3. 応用例

 埋込型SQLは、多様な業界で広く利用されています。具体的な応用例として以下が挙げられます:

  1. 金融システム:銀行システムでは、毎日数百万件の取引データを処理する必要があります。埋込型SQLを使用することで、リアルタイムで取引データの照会や更新が行えるため、システムのパフォーマンスが向上します。
  2. 在庫管理システム:小売業や物流業界では、在庫状況をリアルタイムで管理する必要があります。埋込型SQLを使用して、商品の入出庫情報を迅速に更新・照会することで、在庫管理の効率化が図れます。
  3. 航空予約システム:航空会社の予約システムでは、膨大な予約情報を同時に処理する必要があります。埋込型SQLは、複雑なクエリを迅速に処理し、リアルタイムでの座席予約や顧客情報の管理を可能にします。

4. 例題

例題1

 以下の埋込型SQLのコード断片がどのような処理を行っているか説明してください。この例では、特定の部門に属する従業員の情報を取得するためのカーソル操作を示しています。

EXEC SQL DECLARE emp_cursor CURSOR FOR
    SELECT empno, ename FROM emp WHERE deptno = :dept_no;
EXEC SQL OPEN emp_cursor;
EXEC SQL FETCH emp_cursor INTO :emp_no, :emp_name;

【回答例】
このコードは以下の処理を行っています:

  1. emp_cursorという名前のカーソルを宣言し、特定の部門(:dept_no)に所属する従業員の番号と名前を選択するSELECT文を定義しています。
  2. カーソルをオープンして、クエリを実行します。
  3. カーソルから1行データをフェッチし、従業員番号を:emp_noに、従業員名を:emp_nameに格納します。

例題2

 カーソルを使用して、すべての従業員の給与を10%増加させる埋込型SQLのコードを作成してください。この例では、データベース内のすべての従業員データに対して更新処理を行う方法を示します。

【回答例】

EXEC SQL BEGIN DECLARE SECTION;
int emp_id;
float salary;
EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE emp_cursor CURSOR FOR
    SELECT empno, sal FROM emp FOR UPDATE;

EXEC SQL OPEN emp_cursor;

EXEC SQL WHENEVER NOT FOUND DO BREAK;

while(1) {
    EXEC SQL FETCH emp_cursor INTO :emp_id, :salary;
    salary = salary * 1.1;
    EXEC SQL UPDATE emp SET sal = :salary WHERE CURRENT OF emp_cursor;
}

EXEC SQL CLOSE emp_cursor;
EXEC SQL COMMIT;

5. まとめ

 埋込型SQLは、ホスト言語にSQL文を直接埋め込むことで、効率的で柔軟なデータベース操作を可能にする技術です。カーソル操作により複数行の逐次処理が可能であり、非カーソル操作では一括処理が行えます。ホスト変数を介して親言語とデータベースを密接に連携させることで、アプリケーションのパフォーマンス向上と開発効率の向上が期待されます。この技術は、金融、物流、航空などの多くの業界での大規模データ処理において不可欠です。