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:
- voor DBMS_ERRLOG http://docs. oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI
- voor de LOG ERRORS INTO-clausule:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#BGBEIACB