Java_Paging_PL/SQL

本文介绍了一个用于Oracle数据库的分页存储过程实现方法。该过程通过输入参数控制页数和每页显示的记录数,能够高效地从大型数据集中检索指定页的数据。此外,还提供了一个包来定义游标变量并实现具体的分页逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE OR REPLACE PROCEDURE page(Pindex in number,
Psql in varchar2,
Psize in number,
Pcount out number,
v_cur out bluedot_pkg.type_cur) AS

v_sql VARCHAR2(1000);
v_count number;
v_Plow number;
v_Phei number;
Begin
------------------------------------------------------------取分页总数
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql
into v_count;
Pcount := ceil(v_count / Psize);
------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize;
v_Plow := (Pindex - 1) * Psize + 1;
--Psql := 'select rownum rn,t.* from cd_ssxl t' ; --要求必须包含rownum字段
v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow ||
' and ' || v_Phei;

open v_cur for v_sql;
End page;

create or replace package bluedot_pkg is

-- Author : GUOZHANXIAN
-- Created : 2007-11-26 19:06:18
-- Purpose :

TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集
end bluedot_pkg;


使用建包方式编写:


create or replace package bluedot_pkg is
TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集
procedure page(Pindex in number,
Psql in varchar2,
Psize in number,
Pcount out number,
v_cur out bluedot_pkg.type_cur);
end bluedot_pkg;


create or replace package body bluedot_pkg is
procedure page(Pindex in number,
Psql in varchar2,
Psize in number,
Pcount out number,
v_cur out bluedot_pkg.type_cur) AS

v_sql VARCHAR2(1000);
v_count number;
v_Plow number;
v_Phei number;
Begin
------------------------------------------------------------取分页总数
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql
into v_count;
Pcount := ceil(v_count / Psize);
------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize;
v_Plow := (Pindex - 1) * Psize + 1;
--Psql := 'select rownum rn,t.* from cd_ssxl t' ; --要求必须包含rownum字段
v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow ||
' and ' || v_Phei;

open v_cur for v_sql;
End page;
end bluedot_pkg;
101.664615: Call trace: 101.664617: dump_backtrace+0xf0/0x140 101.664627: show_stack+0x18/0x28 101.664631: dump_stack_lvl+0x70/0xa4 101.664639: __kernel_unpoison_pages+0x16c/0x1ac 101.664647: post_alloc_hook+0x184/0x1ac 101.664653: prep_new_page+0x28/0x188 101.664658: get_page_from_freelist+0x1bb8/0x1d54 101.664664: __alloc_pages+0xe8/0x2cc 101.664670: __erofs_allocpage+0x88/0xb8 101.664677: z_erofs_do_read_page+0x8f0/0xcb4 101.664683: z_erofs_readahead+0x1f8/0x378 101.664690: read_pages+0x80/0x38c 101.664695: page_cache_ra_unbounded+0x1c4/0x238 101.664701: page_cache_ra_order+0x2c4/0x350 101.664706: do_sync_mmap_readahead+0x27c/0x56c 101.664713: filemap_fault+0x1c0/0xa78 101.664718: handle_mm_fault+0x558/0x20c0 101.664723: do_page_fault+0x20c/0x4b0 101.664730: do_translation_fault+0x38/0x54 101.664736: do_mem_abort+0x58/0x118 101.664742: el0_da+0x48/0x84 101.664748: el0t_64_sync_handler+0x98/0xbc 101.664753: el0t_64_sync+0x1a8/0x1ac 101.664761: page:fffffffe24132000 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x984c80 101.664770: flags: 0x2000000000000000(zone=1|kasantag=0x0) 101.664779: page_type: 0xffffffff() 101.664787: raw: 2000000000000000 dead000000000100 dead000000000122 0000000000000000 101.664796: raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000 101.664802: page dumped because: pagealloc: corrupted page details 101.664809: page_owner info is not present (never set?) 101.667247: Unable to handle kernel paging request at virtual address ffffff891b25a00c
最新发布
03-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值