PLS-00306: falsche Anzahl oder Typen der Argumente im Aufruf GET_NEW_EVENTS in Java
Bin ich immer die folgende Fehlermeldung beim Aufruf einer gespeicherten Prozedur mit Java:
"java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550: Zeile 1, Spalte 7:
PLS-00306: falsche Anzahl oder Typen der Argumente in Aufruf von "GET_NEW_EVENTS'
ORA-06550: Zeile 1, Spalte 7:
PL/SQL: Statement ignored"
Die gespeicherte Prozedur lautet wie folgt:
create or replace package body event_subscription as
procedure get_new_events( p_events in out SYS_REFCURSOR ) as
begin
open p_events for
select log_id from event_alert_log;
end get_new_events;
end event_subscription;
- Und der Java-code cal die gespeicherte Prozedur lautet wie folgt:
sqlString = "BEGIN event_subscription.get_new_events(?); END;";
CallableStatement cs = connection.prepareCall(sqlString);
cs.registerOutParameter(1,OracleTypes.CURSOR);
cs.execute(); //This line is failing and throwing the SQLException
ResultSet rs = (ResultSet) cs.getObject(1);
Oracle, Version: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Produkt
Die Java-version: 1.6.
Kann mir jemand helfen bei diesem Problem. Ich habe versucht, alle möglichen Lösungen zu diesem problem.
Gibt es einen Grund, warum Sie Ihre parameter für gespeicherte Prozeduren deklariert
Hey Lukas, Ja, es war nicht beabsichtigt zu sein. Aber ich war zu versuchen, verschiedene Optionen und während dieser Zeit, machte ich es AUS. Aber ich bekomme den Fehler auch wenn ich es alleine HIN.
Verwenden Sie die JDBC-ODBC-bridge-Treiber eine Verbindung zu Oracle? ("ODBC" in der Fehlermeldung deutet Sie vielleicht, dies zu tun.) Wenn ja, kriegt man das gleiche problem, wenn Sie die Oracle-JDBC-Treiber?
IN OUT
? Es hilft, wenn Sie erklären, Ihre gespeicherte Prozedur parameter wie OUT
statt IN OUT
? Wird kein Wert weitergegeben werden, für den cursor, so macht es Sinn, mir zu erklären, es OUT
eher als IN OUT
.Hey Lukas, Ja, es war nicht beabsichtigt zu sein. Aber ich war zu versuchen, verschiedene Optionen und während dieser Zeit, machte ich es AUS. Aber ich bekomme den Fehler auch wenn ich es alleine HIN.
Verwenden Sie die JDBC-ODBC-bridge-Treiber eine Verbindung zu Oracle? ("ODBC" in der Fehlermeldung deutet Sie vielleicht, dies zu tun.) Wenn ja, kriegt man das gleiche problem, wenn Sie die Oracle-JDBC-Treiber?
InformationsquelleAutor user1723788 | 2012-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seltsam. Kann ich nicht reproduzieren. Ich bin mit Oracle XE 11.2.0.2.0 auf Windows 7 x64 mit version 11.2.0.2.0 von
ojdbc6.jar
.Habe ich nicht Ihre Tische, so dass statt ich fragte ein data-dictionary-view. Ich habe das folgende Paket
und kompiliert die folgende Java-Klasse:
Dieser lief erfolgreich. Es lief auch erfolgreich, wenn ich änderte die gespeicherte Prozedur parameter aus
OUT
zuIN OUT
.BEARBEITEN: Sie haben nun klären Sie in Ihrem Kommentar, dass Sie über die JDBC-ODBC-bridge-Treiber eine Verbindung zu Oracle. Jedoch, Sie registrieren sind der Typ des Parameters als
oracle.jdbc.OracleTypes.CURSOR
. Dieser Typ ist spezifisch für den JDBC-Treiber für Oracle, und daher nicht etwas, was ich erwarten würde, dass der JDBC-ODBC-bridge-Treiber zu verstehen gegeben, dass es Unterstützung für mehrere Datenbanken.Moral von der Geschichte: nicht verwenden die JDBC-ODBC-bridge-Treiber eine Verbindung zu Oracle, wenn mit
OracleTypes.*
Konstanten. Besser noch, verwenden Sie nicht den JDBC-ODBC-bridge-Treiber eine Verbindung zu Oracle.Vielen Dank für die Hilfe. Es war wirklich hilfreich. Ich war über die JDBC-ODBC-Brücke, weil der input für meine Anwendung war DataSourceName aber nicht den tns-Eintrag oder irgendeine Verbindung Zeichenfolge.
InformationsquelleAutor Luke Woodward
Weil Sie ein IN OUT-parameter, so müssen Sie festlegen, zum Beispiel:
und dann die outparameter, die Sie bereits haben. Beide.
Gibt es das problem bekommt man mit einem cursor... das wird nicht funktionieren, als IN-parameter. Werden Sie wirklich senden Sie eine refcursor als parameter?
Was ist, wenn Sie "{ call event_subscription.get_new_events(?); }" callablestatement?
Mit "{ call event_subscription.get_new_events(?); }", die prepareCall wirft eine Fehlermeldung besagt, dass "[Oracle][ODBC]Syntaxfehler oder Zugriffsverletzung.". Ich entfernte die semicolonand ausgeführt ""{ call event_subscription.get_new_events(?) } ", aber das stürzt ab mit folgende Fehlermeldung: # A fatal error erkannt wurde von der Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) bei pc=0x61afe929, pid=7528, tid=9960 # # JRE version: 6.0_31-b05 # Java VM: Java HotSpot(TM) Client VM (20.6-b01 mixed mode, sharing windows-x86 ) # Problematische Rahmen: # C [oracommon11.dll+0x14e929]
InformationsquelleAutor Alfabravo