zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    L6循环神经网络
    L5语言模型与数据集
    L4文本预处理
    L2 Softmax与分类模型
    L3 多层感知机
    L1线性回归
    P4语法(4)Control block
    机器学习笔记(4)Logistic回归
    [CF] Sasha and One More Name
    机器学习笔记(3)多变量线性回归
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6852449.html
Copyright © 2011-2022 走看看