Wie kann ich wieder ein sys_refcursor von oracle-SP in java?
Habe ich eine stored procedure (SP) in oracle:
CREATE OR REPLACE
PROCEDURE "SP_SEL_LOGIN_INFO" (
p_username IN varchar2,
p_ResultSet OUT sys_refcursor
) AS
begin
OPEN p_ResultSet FOR
SELECT * FROM user_accounts
WHERE p_username = username;
end;
In meine java-Klasse, ich habe die folgenden Zeilen von code zum aufrufen der SP:
currentCon = connectionpackage.ConnectionManager.getConnection(dbSource);
CallableStatement stmt = currentCon.prepareCall("{call SP_SEL_LOGIN_INFO(?, ?)}");
stmt.setString(1, username);
stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR
stmt.execute();
rs = stmt.getCursor(2);
Das ist, was ich gefunden habe, online zu nennen, eine SP und Rückgabe eines cursor. Wenn ich versuche zu kompilieren erhalte ich folgende zwei Fehlermeldungen:
error: cannot find symbol stmt.registerOutParameter(2, OracleTypes.CURSOR);
UND error: cannot find symbol rs = stmt.getCursor(2);
Wo er sagt, dass es nicht finden können, OracleTypes und getCursor.
Ich habe versucht, den Import import oracle.jdbc.driver.*;
oder import oracle.jdbc.*;
und bekam den Fehler error: package oracle.jdbc does not exist import oracle.jdbc.driver.*;
und error: package oracle.jdbc does not exist import oracle.jdbc.*;
bzw.
Ich habe auch die ojdbc14.jar Datei in den richtigen Ordner und können eine Verbindung mit einem query-string. Es ist nur, wenn man versucht, die SP, das ist es, gebe mir Mühe.
Die SP ist eine, die wir auf unseren aktuellen CF-website, so möchte ich nur wiederverwenden, wie es ist. Könnte jemand bitte etwas Licht auf, warum dies nicht funktioniert? Oder wenn es eine alternative gibt, etwas code zu verwenden, um die Rückgabe eines Cursors aus einer Oracle-SP? Danke.
InformationsquelleAutor kei23th | 2012-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Freundlicherweise versuchen Sie dies, es könnte das Problem lösen.
Ersetzen Sie diese
mit
Außerdem für den Aufruf Ihrer Prozedur verwenden Sie diese Anweisung.
InformationsquelleAutor Jåcob
Wenn Sie möchten, um zurückzukehren, nur
resultsets
(Datensätze), dann warum nicht verwenden eine Funktion, die zurückgibtsys_refcursor
als eine gespeicherte Prozedur? Natürlich macht es keinen Unterschiedwenn Sie eine
procedure
oderfunction
im Hinblick auf Leistung, alsfunction
wäre eine beste Praxis, wie Sie Ihreprocedure
ist nicht jedem tut was anderes alsselect
- Anweisung.Hinsichtlich
InformationsquelleAutor Jåcob