dblinkを介してストアドプロシージャを呼び出すための回答から、リモートDBリンクを介してSP呼び出しを行っている場合、ストアドプロシージャを呼び出してResultSet/RefCursorを取得することはできないようです。Oracle10gも使用しています。
リンク全体で単一値の結果を正常に取得でき、SPを正常に呼び出してローカルで結果を取得できますが、リモートDBからResultSetを読み取るときに、同じ「ORA-24338:ステートメントハンドルが実行されません」というエラーが発生します。
私の質問-ストアドプロシージャを使用するための回避策はありますか?共有ビューはより良い解決策ですか?パイプ行?
サンプルストアドプロシージャ:
CREATE OR REPLACE PACKAGE BODY example_SP
IS
PROCEDURE get_terminals(p_CD_community IN community.CD_community%TYPE,
p_cursor OUT SYS_REFCURSOR)
IS
BEGIN
OPEN p_cursor FOR
SELECT cd_terminal
FROM terminal t, community c
WHERE c.cd_community = p_CD_community
AND t.id_community = c.id_community;
END;
END example_SP;
/
ローカルでは機能するがリモートでは機能しないサンプルJavaコード:
Connection conn = DBConnectionManagerFactory.getDBConnectionManager().getConnection();
CallableStatement cstmt = null;
ResultSet rs = null;
String community = "EXAMPLE";
try
{
cstmt = conn.prepareCall("{call example_SP.get_terminals@remote_address(?,?)}");
cstmt.setString(1, community);
cstmt.registerOutParameter(2, OracleTypes.CURSOR);
cstmt.execute();
rs = (ResultSet)cstmt.getObject(2);
while (rs.next())
{
LogUtil.getLog().logInfo("Terminal code=" + rs.getString( "cd_terminal" ));
}
}