Hallo Sebastian,
da es sich bei der Meldung ORA-20001 um eine Userdefinierte Fehlermeldung (siehe u. a. [
www.dbmotive.com]) handelt, scheint das eine Meldung zu sein, die innerhalb von APEX ausgelöst wird, wenn Dein PL/SQL-Script diesen Fehler nicht abfängt.
Wir haben in unseren PL/SQL-Scripts grundsätzlich Exception-Handler integriert, mit denen wir Abbrüche nach möglichkeit verhindern.
Du findestr Info's dazu u. a. bei
[
fara.cs.uni-potsdam.de].
Eine Fehlerbehandlung könnte folgendermaßen aussehen:
LOOP
BEGIN
SELECT 1
INTO dummy
FROM datam.t_objektnutzung
WHERE t_objektnutzung.pk_objnutzung_id = recaktonutzung.objnkz;
EXCEPTION
/******************************************************************************/
/* Wenn keine Daten vorhanden: 1. Setze Dummywerte in Tabelle t_objektnutzung */
/* 2. Schreibe Kommentar in LOG */
/******************************************************************************/
WHEN NO_DATA_FOUND
THEN
INSERT INTO datam.t_objektnutzung
(pk_objnutzung_id, art_id
,art, objnutzung_id
,objnutzung
)
VALUES (recaktonutzung.objnkz, NULL
,recaktonutzung.objnkz, recaktonutzung.objnkz
,recaktonutzung.objnkz
);
cproc.LOG ('W'
,cprocname
, 'Objektnutzung nicht vorhanden, Eintrag für: '
|| recaktonutzung.objnkz
,plogfile
);
END;
END LOOP;
Wobei cproc.LOG eine PL/SQL-Prozedur ist, die Meldungen in ein Logfile schreibt.
In Deinem Fall könnte es sich um die Exception "DUP_VAL_ON_INDEX" handeln (Es wird versucht, doppelt Werte in einer Datenbankspalte zu speichern, die durch einen eindeutigen Index gekennzeichnet sind.)
Wenn der Fehler im PL/SQL nicht abgefangen wird, dann bricht es ab und die nächsthöhere Instanz macht dann die Fehlerbehandlung.
Ich hoffe, dass ich den Kern der Sache getroffen habe.
Gruß
Klaus