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

それ以外の場合はトリガー

    PL / SQL構文では、IF句にSQL文を含めることはできません。

    正しいアプローチは、SELECTステートメントを分離して、その結果をテストすることです。つまり、次のようになります。

    create or replace trigger trig1 
    after insert on table_1 
    for each row 
    declare
        v table2.column2%type;
    begin
        select table2.column2 
        into v
        from table2 
        where table2.id= :new.id;
    
        if v is null
        then 
            update table2 
            set table2.column2 = :new.column1 
            where table2.id = :new.id; 
        end if; 
    end trig1;
    

    これは、table2内の複数の行の存在を処理しないことに注意してください 基準に一致するか、実際に一致する行がありません。また、ロックも処理しません。

    また、このようなコードはマルチユーザー環境ではうまく機能しないことに注意してください。だから私はロックについて言及しました。この種の要件を処理するには、実際には手続き型ロジックを使用する必要があります。よく考えられていないトリガーの場合によくあることですが、本当の原因は貧弱なデータモデルです。 table2.column2 存在しない状態で正規化されている必要があります。




    1. Oracleで列がempty_clob()と等しいかどうかをテストするにはどうすればよいですか?

    2. 2つの日付間の営業時間を計算します

    3. プロジェクトリンクはWampServerでは機能しません

    4. 重複する行を削除するにはどうすればよいですか?