Oracle fängt keine Ausnahme ab

Superigno

Ich habe eine Prozedur in Oracle, ich habe einen Fehler festgestellt, aber der Wert von p_out_msg wird nicht geändert. Warum ist das so? Der Fehler geht stattdessen zum Cursor.

Code:

PROCEDURE get_proj(p_date    IN VARCHAR2,
                   p_out_cur OUT sys_refcursor,
                   p_out_msg OUT VARCHAR2)
IS 
BEGIN
  OPEN p_out_cur FOR 
    SELECT *
      FROM table t
     WHERE TO_DATE(p_date, 'DD-MM-YYYY HH24:MI:SS') = t.date

  p_out_msg := 'SUCCESS';

EXCEPTION
   WHEN OTHERS THEN
     p_out_msg := SUBSTR('An error was encountered: '||SQLERRM, 1, 250);

END get_proj;

Angenommen, ich habe ein ungültiges Datum eingegeben:

Ausgabe:

p_out_cur: ORA-01858: a non-numeric character was found where a numeric was expected

p_out_msg: SUCCESS

Hier ist der anonyme Block, wie angefordert von @brenners1302:

DECLARE
  P_DATE VARCHAR2(200);
  P_OUT_CUR sys_refcursor;
  P_OUT_MSG VARCHAR2(200);
BEGIN
  P_DATE := '1111';

  PACKAGE_TEST.GET_PROJ(
    P_DATE => P_DATE,
    P_OUT_CUR => P_OUT_CUR,
    P_OUT_MSG => P_OUT_MSG
  );

  DBMS_OUTPUT.PUT_LINE(P_OUT_MSG); --SUCCESS

END;
diziaq

Wenn Sie einen Cursor mit OPEN p_out_cur FORder Abfrage öffnen, SELECT * FROM ...wird diese momentan nicht ausgeführt, sondern nur der Cursor-Variablen zugeordnet. So kann eine Ausnahme angezeigt , wenn Sie beginnen FETCHab p_out_cur, denn das ist , wenn die zugehörige Abfrage seine Ausführung beginnt.

Der einfachste Weg, dies zu sehen, besteht darin, Ihr Verfahren auf diese Weise zu ändern.

PROCEDURE get_proj(p_date    IN VARCHAR2,
                   p_out_cur OUT sys_refcursor,
                   p_out_msg OUT VARCHAR2)
IS 
 l_rec myTable%ROWTYPE;
BEGIN
       OPEN p_out_cur FOR 
        SELECT *
          FROM myTable t
         WHERE TO_DATE(p_date, 'DD-MM-YYYY HH24:MI:SS') = t.date

      -- at this point we can get an exception
      FETCH p_out_cur INTO l_rec;

      p_out_msg := 'SUCCESS';

EXCEPTION
   WHEN OTHERS THEN
       p_out_msg := SUBSTR('An error was encountered: '||SQLERRM, 1, 250);    
END get_proj;

Ja, es bedeutet, dass derjenige, der versucht, ihn abzurufen, eine Ausnahme erhalten kann, wenn Sie einen Ref-Cursor öffnen und an die 'Außenwelt' übergeben. Sie können die Anzahl solcher Fälle verringern, indem Sie Parameter überprüfen, bevor Sie sie an die in SQL verwendeten Funktionen übergeben, die Cursorn zugeordnet sind. Beispielsweise,

PROCEDURE get_proj(p_date    IN VARCHAR2,
               p_out_cur OUT sys_refcursor,
               p_out_msg OUT VARCHAR2)
IS 
 l_normal_date DATE;
BEGIN
       -- if p_date has wrong format we better find it out
       -- before using it in a query
       l_normal_date := TO_DATE(p_date, 'DD-MM-YYYY HH24:MI:SS');

       OPEN p_out_cur FOR 
        SELECT *
          FROM myTable t
         WHERE l_normal_date = t.date

      p_out_msg := 'SUCCESS';

EXCEPTION
   WHEN OTHERS THEN
       p_out_msg := SUBSTR('An error was encountered: '||SQLERRM, 1, 250);    
END get_proj;

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

@ try / @ catch fängt keine Ausnahme ab

UncaughtExceptionHandler fängt keine Ausnahme ab

Try / Catch fängt keine Ausnahme ab

Python Requests Mock fängt keine Timeout-Ausnahme ab

Warum fängt mein Code keine Ausnahme ab?

C# fängt keine "verschachtelte" benutzerdefinierte Ausnahme ab

JUnit-Test fängt keine Ausnahme ab

Flurl & xUnit fängt keine Ausnahme mit wait ab

@ try @ catch-Block fängt keine innere Ausnahme ab

Scala Try-Catch fängt keine Ausnahme ab

Try-Catch fängt keine Ausnahme ab

ObjectDoesNotExist fängt keine DoesNotExist-Ausnahme ab

Entity Framework fängt keine SQL-Ausnahme ab

Kamel fängt keine Ausnahme

Der Basisklassenfang fängt keine Ausnahme ab, selbst wenn er vor dem abgeleiteten Klassenfang angezeigt wird

Promise.catch () fängt im AngularJS-Komponententest keine Ausnahme ab

Der C ++ Try-Catch-Block fängt keine Hardware-Ausnahme ab

Task.IsFaulted fängt keine Ausnahme in meinem .Net-Kern ab

doOnError fängt die Ausnahme nicht ab

Python fängt eine benutzerdefinierte Ausnahme ab

Try Block fängt falsche Ausnahme ab

Safari fängt keine Ausnahme ab, wenn versucht wird, mit Javascript try / catch auf das übergeordnete Fensterobjekt zuzugreifen

Der DefaultUncaughtExceptionHandler des Threads fängt keine Ausnahme ab, die in der AlertDialog onClick () -Methode ausgelöst wurde

CookieJar fängt keine eingehenden Cookies ab

Warum fängt Catch keine Fehler ab?

Benutzerdefinierte Ausnahmeklasse fängt keine Ausnahmen ab

Firebase fängt keine Fehler ab

TryCatch Decorator fängt keine Fehler ab

TypeScript fängt keine undefinierte Variable ab?

TOP Liste

  1. 1

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  2. 2

    Wie füge ich mehrere Spalten in einer Spalte mit derselben Tabelle in SQL Server zusammen?

  3. 3

    Wie kann man Gitterquadrate dazu bringen, die Farbe zu ändern?

  4. 4

    Ich kann nicht verstehen, wie man Go-Code in mehreren Dateien kompiliert

  5. 5

    Zählen Sie die Vorkommen jedes Werts in einem Tupel in Python

  6. 6

    Gibt es eine sauberere Möglichkeit, Konstruktorargumente und Instanzeigenschaften einer Klasse in Typescript zu definieren?

  7. 7

    So implementieren Sie Pushwoosh mit ionic 2

  8. 8

    Wie wird der Wert im Dropdown-Menü basierend auf den ausgewählten Daten / IDs angezeigt?

  9. 9

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  10. 10

    Ändern Sie den Knotenpfad in das aktuelle Verzeichnis

  11. 11

    So erstellen Sie ein Array von Objekten aus zwei Arrays von Objekten mit einem gemeinsamen Schlüssel - JavaScript

  12. 12

    Rufen Sie die ID aus der Datagrid-Ansicht ab und zeigen Sie die Daten in Textfeldern einem anderen Formular an

  13. 13

    base js: Wie füge ich einem Objekt eine Eigenschaft auf die 'alte' Weise hinzu?

  14. 14

    Ersetze einen Teil einer Zeichenfolge durch eine Pandas-Spalte als Muster

  15. 15

    Blättern Sie auf Radio Click zur Abschnitts-ID

  16. 16

    CBCentralManager wird nach dem Verbinden neu gestartet

  17. 17

    Scherz, wie man eine Funktion verspottet, die von einer verspotteten Funktion zurückgegeben wird

  18. 18

    django-allauth Empfängersignal zum Hinzufügen einer Gruppenberechtigung zum Benutzer bei der Anmeldung

  19. 19

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  20. 20

    AQL: Teilweise Übereinstimmung in einer Reihe von Zeichenfolgen

  21. 21

    So summieren Sie die Werte zweier Tabellen und gruppieren sie nach Datum

heißlabel

Archiv