sql >> Database >  >> RDS >> Oracle

Mutatiefout aan na invoegtrigger

In orakel zijn er twee niveaus van triggers:rijniveau en tafelniveau.

Triggers op rijniveau worden for each row uitgevoerd . Triggers op tabelniveau die per instructie worden uitgevoerd, zelfs als een instructie meer dan één rij is gewijzigd.
In een trigger op rijniveau kunt u de tabel zelf die de trigger heeft niet selecteren/bijwerken:u krijgt een mutatiefout.

In dit geval is er geen UPDATE-statement nodig. Probeer dit eens:

CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
BEFORE INSERT
ON aso.aso_quote_headers_all
FOR EACH ROW
BEGIN
 :new.quote_expiration_date=sysdate+90;     
END;
/

BEWERKEN Rajesh zei dat het mogelijk is dat OP alle andere records in de aso_quote_headers_all wil bijwerken voordat een nieuwe rij wordt ingevoegd. tafel.

Nou, dit is haalbaar, maar het is een beetje lastig. Om dit goed te doen, heb je

. nodig
  1. Een pl/sql-pakket en een variabele in de pakketkop die wordt gewijzigd door de triggers. Deze variabele kan een lijst zijn met de ID's van nieuw ingevoegde records. Rijniveau na invoegtrigger zou een nieuwe ID aan de lijst toevoegen. De inhoud van deze pakketvariabele zal voor elke verschillende sessie anders zijn, dus laten we deze variabele session_variable noemen .
  2. Rijniveau na invoegtrigger, die een nieuwe ID zou toevoegen aan de session_variable .
  3. Tabelniveau na invoegtrigger die ID's zou krijgen van de session_variable , verwerk de ID en verwijder deze uit de session_variable . Deze trigger kan noodzakelijke selecties/updates uitvoeren op de aso_quote_headers_all. Nadat een nieuw ingevoegde ID is verwerkt, moet deze trigger ervoor zorgen dat deze wordt verwijderd uit de session_variable .


  1. Een SQL Server-database importeren in Access 2016

  2. MAX() Functie in PostgreSQL

  3. BOB Opgestelde verklaring Binnen een klas

  4. Algemene fout:1005 bij het maken van een sleutelbeperking - Laravel