17.10 - 例 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-171K-JPN
Language
日本語 (日本)

例: ABORT文

次の例では、削除される従業員の行がemployeeテーブルにない場合、ABORT文はマクロの実行を終了させます。

マクロ内の文は、1つの複文リクエストとして入力されます。そのため、ABORT文のWHERE条件が満たされた場合には、リクエスト全体がアボートされ、departmentテーブル内のカウントの正確性が保たれます。

     CREATE MACRO del_emp (num SMALLINT FORMAT '9(5)',
        dname VARCHAR(12),
        dept  SMALLINT FORMAT '999') AS (
     ABORT 'Name does not exist' WHERE :num NOT IN (
     SELECT emp_no
     FROM employee
     WHERE UPPER(name) = UPPER(:dname))
    ;DELETE FROM employee
     WHERE UPPER(name) = UPPER(:dname)
    ;UPDATE department
      SET emp_count = emp_count - 1
      WHERE dept_no = :dept; ) ;

例: 有効なABORT文

以下のABORT文は、すべて構文的に正確です。

     ABORT
     WHERE user= 'DBC';

     ABORT
     FROM table_1
     WHERE table_1.x1 = 1;

     ABORT
     FROM table_11
     WHERE table_1.x1 > 1;

     ABORT
     FROM table_1,table_2
     WHERE table_1.x1 = table_2.x2;

例: WHERE句付きのABORT文

次の例では、マクロnewempでABORT文を使用します。newempは、新しい従業員ごとに1行をemployeeテーブルに挿入し、SELECT文を実行して新しい情報が正しく入力されたかどうかを検証します。ABORT文を使えば、管理オフィス部門(部門300)に誤って新しい従業員が追加されないようにすることができます。

     CREATE MACRO  newemp  (
        number   INTEGER,
        name     VARCHAR(12),
        dept     INTEGER 100 TO 900,
        position VARCHAR(12),
        sex      CHARACTER,
        ed_lev   BYTEINT ) AS (
     ABORT 'Department number 300 not valid'
     WHERE :dept = 300 ;
     INSERT INTO employee (emp_no, name, dept_no, job_title, sex,
                           ed_lev)
     VALUES (:number, :name, :dept, :position, :sex, :edlev) ;
     SELECT *
     FROM employee
     WHERE emp_no = :number ; ) ;

例: WHERE句内でUDTを使用したABORT

次の例では、ABORT文のWHERE句内でのUDT式の正しい使い方を示しています。

     ABORT WHERE (tab1.euro_col < CAST(0.0 AS euro));

     ABORT WHERE (tab1.cir_col.area() < 10.0);

例: ABORT文のWHERE句でのSQL UDFの使用

次のABORT文は、そのWHERE検索条件のSQL UDFを指定します。

     ABORT FROM t1
     WHERE a1 = test.value_expression(2, 3);