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

トリガーのPL/SQL比較エラー(PLS-00405)

    11gまたは12cを使用している場合は、複合トリガーを作成できます。実際のトリガーアクティビティが開始する前に実行されるセクションがあります。つまり、これはテーブルが変更状態に入る前であるため、そのセクションのテーブルから読み取ることができます。

    create or replace trigger Predmety_Ciu
    For Insert Or Update On Predmety
    Compound Trigger
        MaxID   int;
    
        Before Statement Is Begin
            -- Be prepared this might be the first record written to the table
            select nvl( max( ID ), 0 ) into MaxID from Predmety;
        End Before Statement;
    
        Before Each Row Is Begin
          IF :NEW.ID = :NEW.NAVAZUJE_NA THEN --There is an error (PLS-00405) 
            Raise_Application_Error(-20000, 'Predmet nemuze navazovat sam na sebe.', False);
          Elsif :New.Navazuje_Na > Maxid Then
            Raise_Application_Error(-20001, 'Predmet nemuze navazovat na neexistujici predmet. Další objekt ID: ' || to_char( Maxid ), False);
          Elsif :New.Id < 0 Or :New.Navazuje_Na < 0 Then
            Raise_Application_Error(-20002, 'Neplatny index predmetu nebo predmetu, na ktery ma dany predmet navazovat.', False);
          End If;
        End Before Each Row;
    
        After Each Row Is Begin
            -- Vložte nějaký kód, který chcete spustit po vložení řádku
            If Inserting Then
                Maxid := Maxid + 1;
            end if;
        End After Each Row;
    
        After Statement Is Begin
            Null; -- Vložte nejaký kód, který chcete spustit po zadání všech rádek.
        End After Statement;
    End Predmety_Ciu;
    

    例外が必要だったので、例外ハンドラーを削除しました。



    1. mysqlchefデータベースレシピが大きなファイルで失敗する

    2. mysqlクエリを配列に分割します。各クエリは;で区切られます。

    3. ApacheHadoopデータ出力をMysqlデータベースに保存する

    4. アクセスソースコード管理にOASIS-SVNとgitを使用する