oracle如何每次取1000条

yugiant 2010-07-20 02:36:42
我想每次从表中取1000条,这1000条处理完后改变某一状态值,然后通过job每次再取下面1000条
oracle没有select top n的,该如何实现
望指教,谢谢
...全文
1778 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
narsh 2010-07-20
  • 打赏
  • 举报
回复
比如状态字段为:flag,修改过后flag=1

则sql如下:
select *
from table1
where flag<>1 and rownum<1001


Oracle中的rownum和SQL Server中的top有类似的效果。
碧水幽幽泉 2010-07-20
  • 打赏
  • 举报
回复

必须在where子句中加个条件限制下取的数据。
比如7楼说的状态限制。



lzf616 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yugiant 的回复:]
要能循环每1000条,每1000条向下取的,望指教,谢谢
[/Quote]

哥啊,你不是已经改变状态了吗?你排除已经处理那些不就可以了么??
唉~~~~~加个条件就可以——
yxy10072510329 2010-07-20
  • 打赏
  • 举报
回复
create or replace procedure getThData
(
instart number, --第几次取
outCursor out sys_refCursor
)
is
begin
select * from tablename where primaryKey in
(select primaryKey from tablename where rownum<1000*instart+1000)
and rownum<1000 order by primaryKey desc;
end;
yxy10072510329 2010-07-20
  • 打赏
  • 举报
回复
rownum是取一次算一次的,要是过程的话还比较简单:

create procedure getThData

instart number, --第几次取
outCursor out sys_refCursor

is
begin
select * from tablename where primaryKey in
(select primaryKey from tablename where rownum<1000*instart+1000)
and rownum<1000 order by primaryKey desc
end
lihongyan5876 2010-07-20
  • 打赏
  • 举报
回复
oracle 中语句:

select * from(select * from 表 order by 某字段) where rownum <=1000
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yugiant 的回复:]

要能循环每1000条,每1000条向下取的,望指教,谢谢
[/Quote]你是想做成分页处理吧?估计只有写个存储过程吧
vber1010 2010-07-20
  • 打赏
  • 举报
回复
加上有个state字段,状态修改之前state=0,修改以后不等0 则:

select * from (select deptno,rownum rn from emp where state<>0) where rn <=1000

yugiant 2010-07-20
  • 打赏
  • 举报
回复
要能循环每1000条,每1000条向下取的,望指教,谢谢
心中的彩虹 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 yugiant 的回复:]
我想每次从表中取1000条,这1000条处理完后改变某一状态值,然后通过job每次再取下面1000条
oracle没有select top n的,该如何实现
望指教,谢谢
[/Quote]


select * from (select a.*,rownum rn from tb) a where a.rn>=1 and a.rn<=1000


yan562726884 2010-07-20
  • 打赏
  • 举报
回复
想自动让它某个时间段再去取 用job把
yugiant 2010-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lzf616 的回复:]

SQL code

--类似与 SQL SERVER 的TOP的 ORACLE写法是
select * from (select * from tablename order by 某字段) where rownum<1001
--这就是按某字段排列的前一千条数据
[/Quote]
但是做成循环会自动取下一个1000条吗
Phoenix_99 2010-07-20
  • 打赏
  • 举报
回复
select * from (select deptno,rownum rn from emp) where rn between 0 and 1000
lzf616 2010-07-20
  • 打赏
  • 举报
回复

--类似与 SQL SERVER 的TOP的 ORACLE写法是
select * from (select * from tablename order by 某字段) where rownum<1001
--这就是按某字段排列的前一千条数据

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧