einfügen des Datensatzes in die Tabelle auf Ausnahme
Hier ist mein Szenario:
Ich möchte eine Prozedur schreiben, in oracle gibt es vier Tabellen, tab1, tab2, tab3, err. tab1 hat einige Daten in zwei Spalten (id number, name varchar(250))
, während andere leer sind.
schema für tab2 ist
(id number, name varchar(50)), for tab3 (id number, name varchar(250))
.
Möchte ich zum einfügen von Daten aus tab1 zu tab2 und wenn es die Ausnahme, wie z.B. name, der größer ist als varchar(50), es wird sich einfügen in tab3 und auch einfügen, Fehlermeldung in err Tabelle.
Also alle Datensatzes aus tab1 eingefügt werden soll in tab2 und tab3 entsprechend mit exception handling.
Hier ist, was ich versucht habe aber gescheitert.
CREATE OR REPLACE
PROCEDURE exception_handler
IS
vSqlErr VARCHAR2(200) ;
vSqlCode VARCHAR2(5) ;
id2 NUMBER;
name2 VARCHAR(250);
BEGIN
INSERT ALL INTO tab3 VALUES
(id, name
)
SELECT * FROM tab1 t;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO tab2 VALUES
(id, name
);
vSqlErr := SUBSTR(sqlerrm, 1, 200) ;
vSqlCode := SUBSTR(SQLCODE, 1, 5) ;
INSERT INTO err VALUES
(vSqlErr, vSqlCode
) ;
COMMIT ;
RAISE;
END;
- Ich bin ganz frisch mit der Datenbank, so dass Sie wollen, dass jemand für mich tun,
- hier habe ich versucht, aber ..
- CREATE or REPLACE PROCEDURE exception_handler IST vSqlErr Varchar2(200) ; vSqlCode Varchar2(5) ; id2-Nummer; name2 varchar(250); BEGIN einfügen in tab3 Werte (id, name) select * from tab1, t; EXCEPTION WHEN Others then insert into tab2 Werte(id, name); vSqlErr := substr(sqlerrm, 1, 200) ; vSqlCode := substr(sqlcode, 1, 5) ; insert into err-Werte(vSqlErr, vSqlCode) ; Commit ; ERHÖHEN; end;
- Ich habe bearbeitet Ihre Frage. Und, bitte Lesen Sie meine Antwort weiter unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nur eine einfache demonstration auf Basis Ihrer Eingaben in der Frage. Gehen Sie besser für BULK Verarbeitung und SQL%BULK_EXCEPTIONS. Und verwenden Sie nicht, WENN ANDERE blind.
Lassen Sie uns sagen, Sie haben eine
EMP
Tisch, und Sie haben einecheck constraint
auf der der name des Mitarbeiters nicht mehr als 5 Zeichen. Es ist einEMP_ERR
Tabelle log die Fehler-Codes und Fehler-Nachricht. Mal sehen, ein test-Fall:Ermöglicht das ausführen der Beschaffung mit ename Wert mehr als 5 Zeichen, so dass es wirft einen Fehler, und wir erwarten, dass eine Zeile eingefügt werden, in der
emp_err
Tabelle.So, wird der Fehler ausgelöst. Mal sehen, wenn es angemeldet ist, in der Fehler-Tabelle.
Wir haben die Fehler details protokolliert.