Oralce 写一个分页的存储过程

本文介绍如何在Oracle数据库中创建带有分页功能的存储过程。包括建立存储过程所需的包、定义游标类型、实现分页逻辑等关键步骤。

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

[img]http://dl2.iteye.com/upload/attachment/0092/9667/b3350faa-af24-31ad-989e-446d53f2393a.jpg[/img]

[img]http://dl2.iteye.com/upload/attachment/0092/9667/b3350faa-af24-31ad-989e-446d53f2393a.jpg[/img]
  有返回值的存储过程(列表 结果集)

  案例:编写一个过程,输入部门编号,返回该部门所有员工的信息。对该题的分析如下:

  由于Oracle的存储过程没有返回值,它的所有返回值都是通过out参数来代替的,列表同样也不例外,但是由于是集合,所以不能用一般的参数,必须要用package,所以分两部分:

  1)建一个包。如下:

  create or replace package testpackage AS TYPE test_cursor

  is ref cursor;

  end testpackage;

  在该包中我定义了一个游标类型 test_cursor

  下面就是写创建过程了

  create or replace procedure chenchuang_pro

  (chenNo in number p_cursor out testpackage.test_cursor) is

  begin

  open p_cursor for select * from emp wheredeptno-chenNo;

  end;

  ---------------------------------------------------------

  要求,编写一个存储过程,要求可以输入表名,每页显示记录数,当前页,返回总记录数,总页数,和返回结果集。(也就是写一个

  分页的存储过程)

  Oracle 的分页:

  在分页的时候,把下面的sql语句当作模板使用

  select * from (select t1.* , rownum rn from (select * from

  emp)t1 where rn<=10) where rn>=6

  --开始编写分页的过程

  先写一个包

  create or replace package testpackage AS TYPE test_cursor

  is ref cursor;

  end testpackage;

  created or replace procedure fenye

  (tableName in varchar2,

  PageSize in number;--每页显示的数据量

  PageNow in number;--当前的页码

  myRows out number;--总记录数

  myPageCount out number;--中页数

  P_cursor out testpackage.test_cursor-- 返回的记录集

  ) is

  -- 定义部分

  ---定义sql语句

  v_sql varchar2(1000);

  v_begin number:=(PageNow-1)*PageSize+1;--分页算法

  v_end number :=PageNow*PageSize;

  begin

  --执行部分

  v_sql:='select * from (select t1.* , rownum rn from (select * from '|| tableName||')t1 where rn<='||v_end||') where rn>='||v_begin;

  --把游标和sql关联

  open p_cursor for v_sql;

  --计算MyRows 和MyJpageCount

  --组织一个sql

  v_sql:='select count(*) from '|| tableName

  --执行sql,并把返回值 赋给MyRows

  excute immediate v_sql into MyRows;

  --计算myPageCount

  if mod (myRows,PageSize )=0 then

  myPageCount:=myRows/PageSize;

  else myPageCount:=myRows/PageSize+1;

  end if ;

  --关闭游标

  close p_cursor;

  end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值