sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL-jämförelsefel i triggern (PLS-00405)

Om du har 11g eller 12c kan du skriva en sammansatt trigger. Den har en sektion som körs innan den faktiska utlösande aktiviteten startar. Det vill säga, du kan läsa från tabellen i det avsnittet eftersom detta är innan tabellen går in i ett muterande tillstånd:

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;

Jag tog bort undantagshanteraren eftersom jag ville ha undantagen.



  1. Slumpmässigt viktat urval av en händelse

  2. Det går inte att skapa MySQL-utlösare med TRIGGER-behörighet den 5.1.32

  3. Använda Jenkins med Kubernetes AWS, del 3

  4. Ta reda på vilket operativsystem SQL Server körs på (T-SQL-exempel)