以下是我使用Callabe Statement.Statement调用的函数获取游标,因为java中的rowtype是不可能的。但是我得到了一个不按顺序的错误。 java.sql.SQLException:ORA-01002:fetch out of sequence
final TextView eSpinnerTV = (TextView)view.findViewById(android.R.id.text1);
Callabe声明如下
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;
答案 0 :(得分:1)
您收到错误,因为游标返回一行并且该行已被提取。
在检索到最后一行之后不要发出fetch语句 - 不再需要获取行。
最好将功能分为:
1一个函数,它返回必须更新的行的ID。
2执行更新的程序
3使用ID进行进一步处理。