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

Oracleのトリガーで日付を変更する際の問題

    次のようなものが必要です:

    CREATE OR REPLACE TRIGGER TRIGGER_D
    BEFORE
    INSERT OR UPDATE ON CONTRACTS
    FOR EACH ROW
    DECLARE
    BEGIN
      UPDATE CONTRACTS
      SET    ENDDATE   = :NEW.STARTDATE - INTERVAL '1' DAY
      WHERE  CLIENTID  = :NEW.CLIENTID
      AND    ENDDATE   > :NEW.STARTDATE
      AND    STARTDATE < :NEW.STARTDATE;
    END;
    

    ただし、トリガーが監視しているテーブルを更新しているため、トリガーによって更新が発生し、トリガーが再度呼び出され、テーブルの変更エラーが発生する可能性があります。

    前の行で更新を実行してから挿入/更新を実行できるストアドプロシージャでビジネスロジックをラップする方がよい場合があります。次に、テーブルに対して直接DMLステートメントを実行するのではなく、代わりにストアドプロシージャを呼び出します。




    1. データベースに年を保存する

    2. Empty($ _ POST)のデフォルト値を設定するにはどうすればよいですか?

    3. MySQLに有効な自動インクリメント値として0を取得させる方法

    4. DATETIME列のランダム値