例: 多額の昇給の監査ログ - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

トリガーは、あらゆる種類の監査に特に役立ちます。この例では、従業員が10パーセントを超える昇給を受けた場合にログ レコードを挿入するAFTER行トリガーを示しています。

以下に、テーブルの定義を示します。

     CREATE TABLE employee (
       name      CHARACTER(30), 
       dept_Id   INTEGER, 
       salary    DECIMAL(10,2), 
       comments  CHARACTER(30));
      CREATE TABLE salary_log (
       user_name  CHARACTER(30), 
       emp_name   CHARACTER(30), 
       old_salary DECIMAL(10,2), 
       new_salary DECIMAL(10,2));

ここで、employeeテーブルにトリガーを定義します。

     CREATE TRIGGER RaiseTrig
       AFTER UPDATE OF salary ON employee
       REFERENCING OLD AS OldRow NEW AS NewRow
     FOR EACH ROW
       WHEN ((NewRow.salary-OldRow.salary)/OldRow.salary >.10)
       INSERT INTO salary_log
       VALUES ('USER', NewRow.name, OldRow.salary, NewRow.salary);

以下のリクエストが処理されると、salary_logに対して2つの挿入が行なわれます。3番目の更新はトリガーのWHEN条件に適合しないので、salary_logに挿入される行はありません。

     UPDATE employee
     SET salary = salary*1.5, comments = 'Employee of the Year'
     WHERE name = 'John Smith';
     UPDATE employee
     SET salary = salary*2, comments = 'Employee of the Decade'
     WHERE name = 'Min Chan';
    
     UPDATE employee
     SET salary = salary*1.05, comments = 'Normal midrange raise'
     WHERE name = 'Lev Ulyanov';