從答案到calling a stored proc over a dblink似乎無法調用存儲過程並在通過遠程數據庫鏈接進行SP調用時返回ResultSet/RefCursor。我們也在使用Oracle 10g。通過數據庫鏈接獲取ResultSet/RefCursor
我們可以在鏈接上成功獲取單值結果,並且可以成功調用SP並在本地獲取結果,但從遠程數據庫讀取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代碼在本地而不是遠程工作原理:對於從Java到遠程數據庫的直接連接
Connection conn = DBConnectionManagerFactory.getDBConnectionManager().getConnection();
CallableStatement cstmt = null;
ResultSet rs = null;
String community = "EXAMPLE";
try
{
cstmt = conn.prepareCall("{call [email protected]_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"));
}
}
感謝您的建議 - 我們現在傾向於選項3。 – JonathanJ 2010-03-31 02:58:43