例: 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);