Ich benutze Oracle SQL Developer, aber ich habe ein Problem, Ergebnisse von einem Paket zu sehen, das einen Ref-Cursor zurückgibt. Unten ist die Paketdefinition:
%Vor%Ich denke, die Frage ist möglich und wenn ja, was muss ich tun. Ich verwende Oracle SQL Developer 1.5.5. Danke.
Wade
Hier ist der Code, den ich benutzt habe, um mein Paket aufzurufen (generiert von TOAD):
%Vor%Ich bekomme den Fehler:
ORA-06502: PL / SQL: numerischer oder Wertfehler
Hoffe das klärt es ein bisschen mehr auf.
Wenn Sie eine Prozedur haben, die einen Refcursor in der Signatur des Procs benötigt, können Sie dies tun:
%Vor%Markieren und drücken Sie F5.
In Ihrem Kommentar sagen SieHier ist der Fehler:
ORA-06502: PL / SQL: numerisch oder Wert Fehler ORA-06512: in Zeile 16
Wie auch immer es manchmal aussehen mag, PL / SQL-Fehler werden nicht zufällig erzeugt. Dieser Fehler verweist auf eine fehlerhafte Datentypkonvertierung, die in Zeile 16 der Prozedur auftritt. Ohne Ihre gesamte Prozedur zu sehen, können wir Zeile 16 nicht genau lokalisieren. Glücklicherweise setzt der Code-Editor in SQL Developer Zeilennummern in den Gutter; Wenn Sie keine Zeilennummern sehen, müssen Sie eine Einstellung umschalten.
Sie müssen nach einer Zeichenfolge suchen, die in eine Zahlen- oder Datumsvariable umgewandelt wird, oder eine Zahl, die in ein Datumsfeld umgewandelt wird. Dies kann durch eine explizite TO_NUMBER () oder TO_DATE signalisiert werden. In diesem Fall müssen Sie die Formatmaske und / oder den Dateninhalt überprüfen. Alternativ können Sie eine implizite Besetzung haben. In diesem Fall müssen Sie es möglicherweise mit der entsprechenden Formatmaske explizit machen. Natürlich könnte es sich um eine versehentliche und unerwünschte Konvertierung handeln, da die Projektion der SELECT-Anweisung nicht mit der Signatur des REF CURSOR-Datensatzes übereinstimmt. Das ist leicht zu beheben.
Machen Sie einfach eine Schleife, die durch den Ref-Cursor iteriert. Sie können mit DBMS_OUTPUT.PUT_LINE()
auf der Konsole ausgeben und bestimmte anzuzeigende Felder auswählen.
Der einzige explizite Wert, den ich im generierten Programm sehe, ist
%Vor% Versuchen Sie eine explizite Konvertierung ( to_date ('31-AUG-2009', 'DD-MON-YYYY')
statt dessen, vielleicht wird das Problem dadurch beseitigt.
Wenn das nicht hilft, können Sie sehen, ob Ihr Fehler in der Sp oder in Ihrem Code generiert wird? Wenn Sie dies nicht direkt herausfinden können, definieren Sie einen SP aus dem Code, den Sie haben, setzen Sie einen Breakpoint und gehen Sie durch den Code, um zu sehen, woher der Fehler kommt.
Es gibt keine Möglichkeit zu sagen, ohne zu sehen, was die Abfrage des Cursors ist. Sehen Sie sich die SELECT-Anweisung an, die Sie in der Prozedur SP ausführen. Eine der Spalten, die Sie in rec_type in ein numerisches Feld auswählen, gibt Zeichendaten zurück, die nicht in eine Zahl konvertiert werden können.
Anstatt herauszufinden, wie der Cursor ausgegeben werden soll, nehmen Sie die SELECT-Anweisung von sp und führen Sie sie eigenständig aus. Schauen Sie sich die Ergebnisse an, die Sie erhalten. Sie werden nach einigen nicht einstelligen Werten suchen, die in einem der Felder zurückkommen, in dem Sie eine Zahl erwarten.
Tags und Links sql oracle plsql oracle-sqldeveloper ora-06502