Oracleデータベース学習ノート(26)--トリガーの概念と分類

3910 ワード

トリガの概念


トリガは、追加削除操作を行うときに、そのルールを満たす限り、自動的にトリガされ、呼び出す必要がありません.

トリガの分類

  • 文レベルトリガ:for each rowのトリガは含まれません.
  • 行レベルトリガ:for each rowを含むのが行レベルトリガです.

  • 加for each rowは、oldまたはnewのオブジェクト/行レコードを使用するためです.

    トリガ内のトリガ文と擬似レコード変数の値


    トリガ文
    :old
    :new
    Insert
    すべてのフィールドが空です(null)
    挿入するデータ
    Update
    以前のローの値を更新
    更新後の値
    Delete
    以前のローの値を削除
    すべてのフィールドが空です(null)

    学習ノート


    1、レコードを挿入し、新入社員の入社【文レベルトリガー】を出力する
    create or replace trigger t1
    after
    insert
    on person
    declare
    
    begin
      dbms_output.put_line('       ');
    end;
    

    トリガt 1
    INSERT INTO person
    VALUES (1, '  ');
    
    COMMIT;
    
    SELECT *
    FROM person;
    

    2、従業員に給料を下げることができない【行レベルトリガ】
    create or replace trigger t2
    before
    update
    on emp
    for each row
    declare
    
    begin
      if :old.sal>:new.sal then
         raise_application_error(-20001, '       ');
      end if;
    end;
    

    カスタム例外かすたむれいがい:raise_application_Error(-2001~-20999間、「エラーメッセージ」);
    トリガt 2
    SELECT *
    FROM emp
    WHERE empno = 7788;
    
    UPDATE emp
    SET sal = sal - 1
    WHERE empno = 7788;
    
    COMMIT;