我想写一个分页的存储过程,接收页大小我第几页两个参数,请问怎么实现?
解决方案 »
- 临时表空间文件太大,导致无法备份数据库,怎么办
- oracle数值类型只有number一种吗
- 一个ORACLE(9i) 预编译器(pro c/c++)生成一个.cpp文件在VC++(6.0)中无法执行?
- JOB 是干啥用的,不明白,请解释一下!
- 谁帮个忙提供一个Oracle的support identifier吧。为了下载9.2.0.4的PatchSet。
- 寻oracle for linux安装版本!
- 求教:在oracle里触发器里写游标的语法
- 急救!大虾请指教:数据库连接问题
- 哪里有触发器的资料
- oracle怎么用存储过程计算年龄并且修改年龄
- oracle9i 10g 超过1000汉字问题
- 存储过程报ORA-01722无效数字错误
var ocursor refcursor;declare
ipagesize number;
ipagenum number;
istart number;
iend number;begin
ipagesize := 10; --每页10条记录
ipagenum := 2; --第二页 istart := ipagenum * ipagesize;
iend := istart + ipagesize - 1; open :ocursor for
select *
from (select t.*, rownum as rid from tabname t order by rowid)
where rid between istart and iend;
end;
/print ocursor;你根据这个改成存储过程吧
给个例子
create or replace procedure test_pro1(a in number,b in number)
as
date1 varchar2(10);
begin
for cur1 in (select days from(
select days,row_number()over(order by days)rn from test_b)
where rn>a*b and rn<=a*(b+1))
loop
date1:=to_char(cur1.days,'YYYY-MM-DD');
dbms_output.put_line(date1);
end loop;
end test_pro1;
create table test_b as select to_date(
'2009-08-05','yyyy-mm-dd')-1 + rownum days from dual
connect by rownum <=100;begin
test_pro1(10,3);
end;--output
2009-09-04
2009-09-05
2009-09-06
2009-09-07
2009-09-08
2009-09-09
2009-09-10
2009-09-11
2009-09-12
2009-09-13