gpt4 book ai didi

java - Callabe 语句 Oracle Update Skip 锁定获取无序错误

转载 作者:行者123 更新时间:2023-12-01 09:06:17 24 4
gpt4 key购买 nike

以下是我使用 Callabe Statement 调用的函数。Statement 获取游标,因为 rowtype 在 java 中是不可能的。但是我收到了乱序错误。java.sql.SQLException:ORA-01002:不按顺序获取

    create or replace FUNCTION DEQUEUE
RETURN SYS_REFCURSOR
IS
c_Result SYS_REFCURSOR;
BEGIN
OPEN c_Result FOR SELECT * FROM QUEUE_SKIP_LOCKED WHERE ROWNUM=1 FOR UPDATE SKIP LOCKED;
declare
c_fdbQueuerow sys_refcursor;
l_queueRow QUEUE_SKIP_LOCKED%rowtype;
begin
c_fdbQueuerow := c_Result;
loop
fetch c_fdbQueuerow into l_queueRow;
IF l_queueRow.key IS NOT NULL THEN
UPDATE QUEUE_SKIP_LOCKED SET STATUS='WORKING' WHERE KEY=l_queueRow.key;
END IF;
exit when c_fdbQueuerow%notfound;
end loop;
RETURN c_fdbQueuerow;
end;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END dequeue;

Callabe声明如下

session.connection().setAutoCommit(false);
cs = session.connection().prepareCall("{?=call dequeue}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.executeUpdate();
session.connection().commit();
ResultSet rs = (ResultSet) cs.getObject(1);
while(rs.next())

最佳答案

您收到错误是因为游标返回一行并且该行已被提取。

检索最后一行后不要发出提取语句 - 没有更多的行可以提取。

最好将函数拆分为:

1 一个返回必须更新的行 ID 的函数。

2 执行更新的过程

3 使用 ID 进行进一步处理。

关于java - Callabe 语句 Oracle Update Skip 锁定获取无序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com