sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL-sammenligningsfejl i trigger (PLS-00405)

Hvis du har 11g eller 12c, kan du skrive en sammensat trigger. Den har en sektion, der udføres, før den faktiske udløsende aktivitet starter. Det vil sige, du kan læse fra tabellen i det afsnit, fordi det er før tabellen går ind i en muterende tilstand:

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;

Jeg fjernede undtagelsesbehandleren, fordi jeg ville have undtagelserne.



  1. Hvordan overføres Oracle dump-fil til AWS RDS-instans?

  2. funktion UNIX_TIMESTAMP eksisterer ikke

  3. Sådan opretter du en tabel i SQL Server ved hjælp af en forespørgsel

  4. Oracle APEX Database Trigger - Problemer med at henvise til databasekolonner