例: CLP スクリプトにおける行データ・タイプの使用

行データ・タイプの最も一般的な使用法について示すため、Db2® CLP スクリプトにおける行データ・タイプの一部の基本的なフィーチャーについて説明します。

以下の Db2 CLP スクリプトは、行データ・タイプの使用法と、その関連操作について示しています。 以下についてのデモンストレーションが含まれます。
  • 行データ・タイプの作成
  • 表の作成
  • プロシージャーの作成。以下が含まれます。
    • 行データ・タイプ宣言
    • 特定の行フィールド値が含まれるタイプに対する値の挿入
    • 行フィールド値に基づく行の値の更新
    • 行フィールド値に対する値の SELECT INTO
    • 行に対する行の値の割り当て
    • パラメーターに対する行フィールド値の割り当て
  • プロシージャーの呼び出し
  • 行データ・タイプと表のドロップ

-- Creating row types

CREATE TYPE row01 AS ROW (c1 INTEGER)@ 

CREATE TYPE empRow AS ROW (id INTEGER, name VARCHAR(10))@  

CREATE TABLE employee (id INTEGER, name VARCHAR(10))@  

CREATE procedure proc01 (OUT p0 INTEGER, OUT p1 INTEGER) 
BEGIN   
  DECLARE v1, v2 row01;   
  DECLARE emp empRow;    

  -- Assigning values to row fields   
  SET v1.c1 = 5;   
  SET (emp.id, emp.name) = (v1.c1 + 1, 'James');    

  -- Using row fields in DML   
  INSERT INTO employee 
  VALUES (v1.c1, 'Beth'), (emp.id, emp.name);   

  UPDATE employee 
  SET name = 'Susan' where id = v1.c1;    

  -- SELECT INTO a row field   
  SELECT id INTO v2.c1 
  FROM employee 
  WHERE name = emp.name;    

  -- Row level assignment   
  SET v1 = v2;    

  -- Assignment to parameters   
  SET (p0, p1) = (v1.c1, emp.id); 

END@  

CALL proc01(?, ?)@ 

SELECT * FROM employee@  

DROP procedure proc01@ 

DROP TABLE employee@  

-- Dropping row types 
DROP TYPE empRow@ 

DROP TYPE row01@
このスクリプトを保管してから、以下のとおりに発行して、Db2 コマンド行から実行できます。

DB2 -td@ -vf <filename>;
このスクリプトを実行した際の出力は、以下のとおりです。

CREATE TYPE row01 AS ROW (c1 INTEGER)
Db20000I  The SQL command completed successfully.

CREATE TYPE empRow AS ROW (id INTEGER, name VARCHAR(10))
Db20000I  The SQL command completed successfully.

CREATE TABLE employee (id INTEGER, name VARCHAR(10))
Db20000I  The SQL command completed successfully.

CREATE procedure proc01 (OUT p0 INTEGER, OUT p1 INTEGER) 
   BEGIN DECLARE v1, v2 row01;
   DECLARE emp empRow;
   SET v1.c1 = 5;
   SET (emp.id, emp.name) = (v1.c1 + 1, 'James');
   INSERT INTO employee  VALUES (v1.c1, 'Beth'), (emp.id, emp.name); 
   UPDATE employee  SET name = 'Susan' where id = v1.c1;
   SELECT id INTO v2.c1 FROM employee WHERE name = emp.name;
   SET v1 = v2;
   SET (p0, p1) = (v1.c1, emp.id);
END

Db20000I  The SQL command completed successfully.

CALL proc01(?, ?)

  Value of output parameters
  --------------------------
  Parameter Name  : P0
  Parameter Value : 6

  Parameter Name  : P1
  Parameter Value : 6

  Return Status = 0

SELECT * FROM employee

ID          NAME      
----------- ----------
          5 Susan     
          6 James     

  2 record(s) selected.


DROP procedure proc01
Db20000I  The SQL command completed successfully.

DROP TABLE employee
Db20000I  The SQL command completed successfully.

DROP TYPE empRow
Db20000I  The SQL command completed successfully.

DROP TYPE row01
Db20000I  The SQL command completed successfully.