[oracle]pl/sql --分页过程demo

这句sql能够用来查询一张表中的特定位置的记录

--查询的方法获取分页的语句
select *from
(select t1.*,rownum rn from (select *from books) t1 where rownum<=4)
where rn >2; 

--使用分页写存储过程

--1 首先要创建一个包,定义游标类型

create or replace package fenyepackage as
type fenye_cursor is ref cursor;
end fenyepackage; 

--2 基本的过程

create or replace procedure fenye(
tablename in varchar2,  --表名
pagesize in number,    --每页有多大
pagenow in  number,     --当前页
myrows out number,     --总共多少记录
mypageconnt out number,   --总共多少页
l_cursor out fenyepackage.fenye_cursor --游标
) is
--得到记录的開始和结束的位置
v_begin number:=(pagenow-1)*pagesize+1;
v_end number:=pagenow*pagesize;
v_sql varchar(1000);
begin
v_sql:=‘select bookid,bookname,pubhouse from (select t1.*,rownum rn from (select *from ‘||tablename||‘) t1 where rownum<=‘||v_end||‘)where rn >=‘||v_begin;
open l_cursor for v_sql;
v_sql:=‘select count(*) from ‘||tablename;
execute immediate v_sql into myrows;
if mod(myrows,pagesize)=0 then
  mypageconnt:=myrows/pagesize;
else
  mypageconnt:=myrows/pagesize+1;
end if;
--close l_cursor;
end; 

--3 使用procedure測试

create or replace procedure fenyeceshi(
tablename in varchar2,pagesize in number,pagenow in number) is
v_myrows number;
v_mypagecount number;
v_bookid books.bookid%type;
v_bookname books.bookname%type;
v_pubhouse books.pubhouse%type;
l_cursor fenyepackage.fenye_cursor;
begin
  fenye(tablename,pagesize,pagenow,v_myrows,v_mypagecount,l_cursor);
--使用循环读出特定页的记录
  loop
    fetch l_cursor into v_bookid,v_bookname,v_pubhouse;
    --not found要连在一起写
    exit when l_cursor%notfound;
    dbms_output.put_line(‘图书ID是:‘||v_bookid||‘  名称是:‘||v_bookname||‘  出版社是‘||v_pubhouse);
  end loop;
  dbms_output.put_line(‘总的记录为:‘||v_myrows||‘条‘);
  dbms_output.put_line(‘总的页数为:‘||v_mypagecount||‘页‘);
end; 

SQL> exec fenyeceshi(‘books‘,2,2); 

图书ID是:3  名称是:angle  出版社是20
图书ID是:4  名称是:anglele  出版社是10
总的记录为:4条
总的页数为:2页 

PL/SQL procedure successfully completed 

??: 这样是能得到结果,可是主过程中对于游标是否关闭非常疑惑

没有关闭的情况下是正常的,关闭了的话会出错

这个问题,待后面解决?
SQL> exec fenyeceshi(‘books‘,2,2);   begin fenyeceshi(‘books‘,2,2); end;   ORA-01001: 无效的游标 ORA-06512: 在 "SCOTT.FENYECESHI", line 12 ORA-06512: 在 line 2

本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309427

时间: 2024-10-07 03:31:34

[oracle]pl/sql --分页过程demo的相关文章

二十六、oracle pl/sql 分页

一.无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程. 案例:现有一张表book,表结构如下:书号.书名.出版社. CREATE TABLE book( ID NUMBER(4), book_name VARCHAR2(30), publishing VARCHAR2(30)); 请写一个过程,可以向book表添加书,要求通过java程序调用该过程. --注意:in->表示这是一

oracle pl/sql 分页

一.无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程. 案例:现有一张表book,表结构如下:书号.书名.出版社. CREATE TABLE book( ID NUMBER(4), book_name VARCHAR2(30), publishing VARCHAR2(30)); 请写一个过程,可以向book表添加书,要求通过java程序调用该过程. --注意:in->表示这是一

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

ORACLE PL/SQL编程之八(二): 把触发器说透

例2:创建DML语句行级触发器.当对emp表执行INSERT, UPDATE, DELETE 操作时,它自动更新dept_summary 表中的数据.由于在PL/SQL块中不能直接调用DDL语句,所以,利用ORACLE内置包DBMS_UTILITY中的EXEC_DDL_STATEMENT过程,由它执行DDL语句创建触发器. BEGIN  DBMS_OUTPUT.PUT_LINE('插入前');  Disp_dept_summary();  DBMS_UTILITY.EXEC_DDL_STATEM

ORACLE PL/SQL编程之八:把触发器说透

原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8

oracle15 pl/sql 分页

PL/SQL分页 编写分页过程 无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程: 案例:现有一张表book,表结构如下:书号 书名 出版社 请写一个过程,可以向book表添加书,要求通过java程序调用该过程. --in:表示这是一个输入参数,默认为in(不写in则默认就是in) --out:表示一个输出参数 Sql代码 1.create or replace procedur

ORACLE PL/SQL编程详解

ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点.本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]

[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) 得到了大家的强力支持与建议,万分感谢.接下来介绍下一篇:oracle pl/sql异常处理部分,还望大家一定