我想实现如下效果:
在某个表中每次都抽取一些随机记录(这个我已实现),下次抽取时,已经抽取过的就不在被抽取的范围之内了。SELECT b FROM fff WHERE x=1 FOR UPDATE NOWAIT
以上这句SQL是否可以实现呢?如果能,接下来该如何操作?
如果不能,盼告之,急。
在某个表中每次都抽取一些随机记录(这个我已实现),下次抽取时,已经抽取过的就不在被抽取的范围之内了。SELECT b FROM fff WHERE x=1 FOR UPDATE NOWAIT
以上这句SQL是否可以实现呢?如果能,接下来该如何操作?
如果不能,盼告之,急。
如果你没有ROLLBACK ,COMMIT 掉的话,就还是锁住的,别的是取不到的
下次随即抽取的时候可以排除之前随即抽取的数据。
两种方式都可以实现楼主需要的结果
----------------------------
上面这个方法可行,可以设一个列,缺省值是0,如果抽取过就设为1,不知如何用一条SQL搞定?
难道先UPDATE,然后再SELECT得到当前的查询结果?
当需要随机抽取一定纪录的时候,建立一个存储过程C,在存储过程中:
declare cursor csr is
select * from (
select * from tab_name a
where not exists (select 1 from tab_name b where a.关键字 = b.关键字)
order by dbms_random.value
) where rownum <= N且将取得的N条记录的关键字加入到B表中,最后返回一个游标
一般的解决办法:
1.建一个临时表,将提取出来的数据插进去
然后在查询的时候用 not in(...) 或者 not exists(...) 关联下;去掉临时表里存在的记录
2.也可以在表里增加一个字段,作为标记