Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择“更新跳过锁定行限制”_Java_Oracle_Queue_Batch Processing - Fatal编程技术网

Java 选择“更新跳过锁定行限制”

Java 选择“更新跳过锁定行限制”,java,oracle,queue,batch-processing,Java,Oracle,Queue,Batch Processing,我有一个用Java编写的程序,它创建了5个线程,从Oracle中选择数据。 select命令如下所示: select * from queue_requests where request_status = 0 and date_requested <= sysdate and rownum <= ? for update skip locked 从队列中选择*如果希望每个线程只选择约五分之一的记录,则可以执行以下操作: select * from (select * from q

我有一个用Java编写的程序,它创建了5个线程,从Oracle中选择数据。 select命令如下所示:

select * from queue_requests where request_status = 0 and date_requested <= sysdate and rownum <= ? for update skip locked

从队列中选择*如果希望每个线程只选择约五分之一的记录,则可以执行以下操作:

select * from (select * from queue_requests where request_status = 0 and date_requested <= sysdate for update skip locked) where rownum <= ?
select *
from   queue_requests
where  request_status = 0 and
       date_requested <= sysdate and
       mod(DBMS_RowID.RowID_Row_Number(queue_requests.rowid),5) = thread_number
       rownum <= ?
for update
skip locked;

即使您无法更改数据库,您也可以执行PL/SQL块,以使用游标实现“工作”功能:

SKIP LOCKED用于队列处理,即获取队列中的下一个解锁对象。因此,我们的想法是从堆栈顶部只取一件东西。每次抓一把松懈的队伍都表明你没有正确地设计队列。我知道“更新跳过锁定”允许我们选择多行,我只是认为我们不应该这样做。你能解释一下为什么每个块的行数很重要吗?
mod(DBMS_RowID.RowID_Block_Number(queue_requests.rowid),5)