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.
InformationsquelleAutor Niha Mialk | 2015-02-23
Schreibe einen Kommentar