鑑於以下功能:我可以更新Oracle存儲過程(Java中的)的結果(sys_refcursor)嗎?
create or replace FUNCTION "GETADDRESSES"
RETURN sys_refcursor
IS
address_cursor sys_refcursor;
BEGIN
OPEN address_cursor FOR
SELECT * FROM Address;
RETURN address_cursor;
END;
我希望能夠修改這一結果在Java中集和後更改回數據庫。它在Java中使用以下方式調用:
String genericQuery = "{ call ? := getAddresses() }";
CallableStatement stmt = connection.prepareCall(genericQuery, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.registerOutParameter(1, OracleTypes.CURSOR);
stmt.execute();
ResultSet rs = (ResultSet)stmt.getObject(1);
while (rs.next())
{
System.out.println (rs.getString(2));
rs.updateString(2, "*" + rs.getString(2));
}
stmt.close();
它引發了一個異常「只讀結果集的無效操作」。有沒有辦法將這個遊標作爲可以更新並返回到Java的數據庫的東西?我正在使用Oracle 10g。
謝謝,羅布
謝謝,但是一旦我這樣做,我會在rs.next()調用中出現錯誤「取出序列」。我需要在存儲過程中執行其他操作嗎? – 2009-10-07 16:11:41
如果您添加FOR UPDATE,那麼您需要關閉自動提交 - 您無法在提取之間進行提交。但在我的測試中,添加FOR UPDATE並沒有幫助。 – 2009-10-07 19:20:39
這很有道理,非常感謝您的努力。 – 2009-10-08 08:35:19