2017-11-02 9 views
-1

PL/SQL開発者から匿名ブロックを使用して呼び出すと完全に機能する次のPL/SQLブロックがあります。PLS-00103 "exit"の代わりに "exit"というシンボルが使用されました。続行する

ORA-06550::私は私のJavaアプリケーション(Webサービス)からそれを呼び出すたび

CREATE OR REPLACE FUNCTION getuserlist 
RETURN SYS_REFCURSOR 
IS userscursor SYS_REFCURSOR; 
BEGIN 
OPEN userscursor FOR 
    SELECT USER_ID 
    ,  USER_NAME 
    FROM TEST_USERS; 
    RETURN userscursor; 
END; 

はしかし、それは次のエラーをスローライン1、列28: PLS-00103: "記号が発生しました; "次のいずれかを期待する場合:

begin case declare end exception exit for goto if loop mod 
    null pragma raise return select update while with 
    <an identifier> <a double-quoted delimited-identifier> 
    <a bind variable> << continue close current delete fetch lock 
    insert open rollback savepoint set sql execute commit forall 
    merge pipe purge 
The symbol "exit" was substituted for ";" to continue. 

そして、ここでは私のJavaコードスニペットです:

String userListSQL = "{ ? = call GETUSERLIST(); }"; 
CallableStatement statement = conn.prepareCall(userListSQL); 
statement.registerOutParameter(1, OracleTypes.CURSOR); //this is the line it throws an error 
statement.execute(); 
resultSet = ((OracleCallableStatement)statement).getCursor(1); 

任意の助け感謝を!

+0

あなたのJavaコードでクエリを使用することができます場合は、ROWNUMを使用して、ページ分割のOracleクエリを使用して試してみて、クエリの数。私は、複雑なSQLクエリのためにストアドプロシージャを使用する方が好きです。 – cdaiga

答えて

0

これは、ストアドプロシージャコールから結果セットを取得する正しい方法ですか?

String userListSQL = "{ ? = call GETUSERLIST(); }"; 
私はあなたがJDBC互換ドライバを使用している場合、これは動作するはずだと思う

PreparedStatement statement = conn.prepareStatement("CALL GETUSERLIST()"); 
resultset = statement.executeQuery(); 
+0

このコードで何も問題はありません。文字列userListSQL = "{?= call GETUSERLIST();}";私は終わりのステートメントの終わりにセミコロンを入れてはいけません。しかし、まだお世話になりました!私はあなたの答えの後にそれを実現しました。 – Nara

関連する問題