sql >> データベース >  >> RDS >> Oracle

トリガーの例を挿入または更新する前のOracle

    以下は、EMPテーブルのレコードを挿入または更新するときに検証を実行するためのOracle BEFORE INSERTORUPDATEトリガーの例です。

    Oracle BEFORE INSERT OR UPDATE Trigger Example

    以下のトリガーは、EMPテーブルに対して次の2つのチェックを実行します。 (1)レコードを挿入する場合は、手数料列が500を超えないようにチェックします。(2)更新する場合は、JOB列をnullに設定しないようにチェックします。

    CREATE OR REPLACE TRIGGER TRIG_EMP_BEF_UPD_INS
    BEFORE INSERT OR UPDATE
    ON EMP
    FOR EACH ROW
    BEGIN
    IF INSERTING
    THEN
    /* commission should not be greater than 500, for new record*/
    IF :new.comm > 500
    THEN
    raise_application_error (
    -20001,
    'Commission should not be greater than 500.');
    END IF;
    ELSIF UPDATING
    THEN
    /* check for column JOB should not be set as null while update*/
    IF :new.job IS NULL
    THEN
    raise_application_error (-20001, 'Column JOB should have a value.');
    END IF;
    END IF;
    END;

    挿入ステートメントのトリガーの上でテスト

    Insert into EMP
    (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
    Values
    (7399, 'A.SMITH', 'CLERK', 7902, 
    TO_DATE('12/17/1980 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 800, 550, 20);

    出力

    Error at line 1
    ORA-20001: Commission should not be greater than 500.
    ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 6
    ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS'
    Script Terminated on line 1.

    更新ステートメントのトリガーの上でテスト

    UPDATE EMP
    SET sal = 900, job = NULL
    WHERE empno = 7499;

    出力

    Error at line 2
    ORA-20001: Column JOB should have a value.
    ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 12
    ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS'
    Script Terminated on line 2.

    次のリンクからデモテーブルをダウンロードすることにより、スキーマでこのトリガーをテストできます。ScottSchemaスクリプトをダウンロードします。

    関連項目:

    • Oracleプロシージャでグローバル一時テーブルを使用するにはどうすればよいですか?
    • WHEN句を使用したOracleトリガーの例
    • Oracleプロシージャの例のテーブルタイプ
    1. SQLコマンドはどのように分類されますか| UBIQ

    2. MySQLの既存の列にnull以外の制約を追加する方法

    3. 高度なSQL:T-SQL挿入ステートメントのバリエーションとさまざまなユースケース

    4. SELECTクエリで計算フィールドを再利用できますか?