sql >> Database >  >> RDS >> Oracle

Oracle JDBC:hoe weet ik welke rij een unieke sleutelbeperking veroorzaakt?

De enige manier (die ik ken) om erachter te komen welke rij het probleem veroorzaakt, is door de functie "aanmeldingsfouten bij" van Oracle te gebruiken. Op die manier de insert zal geen uitzondering genereren en elke rij die een beperking overtreedt, wordt in de opgegeven fouttabel geschreven.

Om dat te doen, moet u eerst een logtabel maken die de afgewezen rijen bevat:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Dat maakt een tabel met de naam ERR$_BD_VEHICLES_TEMP

Voer vervolgens uit verander uw verklaring in dit:

insert into bd_vehicles_temp 
select * 
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;

De instructie gaat door, zelfs als een rij de beperkingen niet valideert. Nadat de verklaring is voltooid, kunt u de inhoud van de tabel controleren ERR$_BD_VEHICLES_TEMP voor de rijen die een beperking hebben geschonden, inclusief de foutmelding en de waarden.

(Bewerken):Als je bij de eerste fout wilt stoppen (en dat in de logtabel wilt zien), laat dan de REJECT LIMIT UNLIMITED weg. clausule.

Meer details staan ​​in de handleiding:



  1. Is het mogelijk om een ​​variabele door te geven aan een opgeslagen procedure-aanroep in mysql?

  2. Wat is de beste manier om een ​​subset van de rijen van een tabel van de ene database naar de andere in Postgres te kopiëren?

  3. Is er een functie om een ​​string te splitsen in PL/SQL?

  4. MySQL-gebruikersmachtigingen