16.20 - シナリオ - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

以下のシナリオで、BEGIN TRANSACTION/END TRANSACTIONの使用法の例を示します。

シナリオ: 削除する明示的なトランザクション

departmentテーブルにemp_count列が入っていると想定すると、次のような明示したトランザクションを使用して、employeeテーブルから1行を削除し、departmentテーブルの部門の人数を減らすことができます。

     BEGIN TRANSACTION;
      DELETE FROM employee
      WHERE name = 'Reed C';
      UPDATE department
      SET emp_count = emp_count -1
      WHERE dept_no = 500;
     END TRANSACTION;

シナリオ: 挿入する明示的なトランザクション

次の例は、明示的なトランザクションです。この例では、各INSERT文がUSINGリクエスト修飾子と関連付けられています。

      BEGIN TRANSACTION ;
      USING ssnumfile (INTEGER)
      INSERT INTO employee (soc_sec_no) VALUES (:ssnumfile) ;
         USING ssnumfile (INTEGER)
      INSERT INTO employee (soc_sec_no) VALUES (:ssnumfile) ;
         USING ssnumfile (INTEGER)
      INSERT INTO employee (soc_sec_no) VALUES (:ssnumfile) ;
     END TRANSACTION ;

シナリオ: DDL文の明示的なトランザクション

次の例は、明示的なトランザクション内のDDL文の使用の例です。これらのトランザクションでは揮発テーブルを作成し、集約演算の結果に対して別の集約演算を実行し、その後、初めてのトランザクションで作成された揮発テーブルを削除します。

DDL文はトランザクション内の唯一の文であるか、またはトランザクション内の最後の文である必要があるので、2つのトランザクションが使用されています。

     BEGIN TRANSACTION;
      CREATE VOLATILE TABLE dept_sum_sal NO LOG (
        dept_no SMALLINT FORMAT '999' BETWEEN 100 AND 900 NOT NULL,
        sum_sal DECIMAL(8,2) FORMAT 'ZZZ,ZZ9.99')
      PRIMARY INDEX(dept_no),
      ON COMMIT DELETE ROWS;
     END TRANSACTION;

     BEGIN TRANSACTION;
      INSERT INTO dept_sum_sal
      SELECT dept_no, SUM(salary)
      FROM employee
      GROUP BY dept_no;
      SELECT AVG(sum_sal)
      FROM dept_sum_sal;
      DROP VOLATILE TABLE dept_sum_sal;
     END TRANSACTION;

シナリオ: 暗黙的トランザクション(BTEQ)

次の例は、BTEQの複文リクエストとして構成されており、そのため、単一の暗黙的トランザクションとして処理されます。

USING修飾子とセミコロンの位置に注意してください。この構成では、いずれかのWHERE条件の失敗によりトランザクションはアボートされ、実行されたすべての挿入と更新の操作は元に戻されます。

     USING var1(CHARACTER),
           var2(CHARACTER),
           var3(CHARACTER)
      INSERT INTO test_tab_u (c1) VALUES (:var1)
      ; INSERT INTO test_tab_u (c1) VALUES (:var2)
      ; INSERT INTO test_tab_u (c1) VALUES (:var3)
      ; UPDATE test_tab_u SET c2 = c1 + 1
         WHERE c1 = :var1
      ; UPDATE test_tab_u SET c2 = c1 + 1
         WHERE c1 = :var2