`

PL/SQL存储过程动态分页查询

阅读更多

因为扯淡的老师上课用了个扯淡的方法实现了个脑残的过程,根本没有实现动态。

非常不爽。于是自己研究。写了一个。

因为懒。懒的去把这东西封装成procedure或function。

有些细节和异常捕获也懒得去写了。比如数组的类型只用了varchar2(50).万一某个字段长度超过了50,就惨了。

基本过程如下,总之各种动态sql。

直接在sql*plus or  PL/SQL development中跑就可以。

 

declare
pageSize number;
currentPage number;
row_count number;--表的总行数
firstRow number;--分页查询第一条
lastRow number;-- 分页查询最后一条
pageTotalNum number;--总页数
process number;--过程
cur_1 number;--游标
table_name varchar2(100);--输入的表名
column_num number;--列数
tmp_sql varchar2(500);  --动态sql语句
get_count_sql varchar2(500);
get_column_num_sql varchar2(200);
n number;--计数
TYPE T_TAB is table of varchar2(50) index by binary_integer;--数组类型
my_array T_TAB;--数组
begin
    table_name:=UPPER('&输入表名');
    pageSize:=to_number('&输入每页条数');
    currentPage:=to_number('&显示页');
    dbms_output.put_line('输入表名:'||table_name||' ,每页条数:'||pageSize||'条'||' ,当前页:第'||currentPage||'页');
    
    --表的总行数
    get_count_sql:='select count(*) from '||table_name;
    EXECUTE IMMEDIATE get_count_sql INTO row_count;
    dbms_output.put_line(table_name||'表的总条数:'||row_count||'条');
    
    --分页共多少页
    pageTotalNum:=ceil(row_count/pageSize);
    dbms_output.put_line('总共'||pageTotalNum||'页');
    firstRow:=1+pageSize*(currentPage-1);
    lastRow:=pageSize*currentPage;
    if lastRow>row_count then
        lastRow:=row_count;
    end if;
    
    dbms_output.put('当记录');
    dbms_output.put_line('从 第'||firstRow||'条 到 第'||lastRow||'条');   
 
    
--获取参数表的列数
    --select count(*) from (select * from user_tab_columns where TABLE_NAME='&name');
    --动态执行sql
    get_column_num_sql:='select count(*) from '||'(select * from user_tab_columns where TABLE_NAME='''||table_name||''')';
    EXECUTE IMMEDIATE get_column_num_sql INTO column_num;  --获取列数
    dbms_output.put_line(table_name||'表,共有'||column_num||'行');

--实现分页输出    
    --临时执行的sql
    tmp_sql:='select tt.* from (select rownum as r_num, t.* from  (select * from '||table_name||' ) t) tt where tt.r_num>='||firstRow||' and  r_num<='||lastRow;
    --动态游标
    cur_1:=dbms_sql.open_cursor;
    dbms_sql.parse(cur_1,tmp_sql,dbms_sql.native);
     --定义游标的列
    for n in 1..column_num+1 loop
        my_array(n):='';
    end loop;
    
    for n in 1..column_num+1 loop
        dbms_sql.define_column(cur_1,n,my_array(n),50);
    end loop;
    
    process:=dbms_sql.execute(cur_1);
    
    loop
        if dbms_sql.fetch_rows(cur_1)>0 then
            for n in 1..column_num+1 loop
                dbms_sql.column_value(cur_1,n,my_array(n));
                dbms_output.put('......'||my_array(n));
            end loop;
            dbms_output.put_line('');    
        else
            exit;
        end if;
    end loop;
end;
 
分享到:
评论

相关推荐

    ORACLE PL/SQL从入门到精通

    此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型转换、程序设计指导原则、合并数据库中的数据行(MERGE)、约束、索引、子查询、分页技术等高级主题。 最后,还有关于字符串、数值、...

    Oracle PL/SQL培训课件

    Oracle PL/SQL是一种在Oracle数据库环境中使用的编程语言,它结合了SQL(结构化查询语言)的查询能力与过程式编程语言的功能。此培训课件旨在帮助开发人员掌握Oracle数据库的开发技能,特别是针对那些已经有SQL基础...

    PL/SQL中文使用说明

    ### PL/SQL 7.0中文使用说明 #### 一、概述 《PL/SQL Developer 7.0中文使用说明书》是一份详尽的技术文档,旨在帮助用户从安装配置到实际应用全面掌握PL/SQL Developer这款强大的Oracle客户端工具。本文档不仅...

    pl/sql developer

    **PL/SQL Developer**是一款专为Oracle数据库设计的集成开发环境(IDE),它极大地简化了PL/SQL语言的应用开发过程。这款软件提供了丰富的功能来帮助开发者高效地编写、调试、测试和优化PL/SQL代码。 #### 二、安装...

    北风网项目培训PLSQL编程之BBS实战项目第二讲

    PL/SQL是Oracle数据库系统中的一个核心组件,全称为Procedural Language/Structured Query Language,即过程化结构查询语言。它是SQL的扩展,为数据库管理提供了更强大的编程能力,允许开发者编写存储过程、函数、...

    PL/SQL中编写Oracle数据库分页的存储过程

    此文以oracle数据库中的SCOTT用户的EMP表为例,用PL/SQL Developer编写一个分页存储过程,要求是:可以输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回的结果集。 由于需要返回查询出来的结果集,...

    oracle Pl/sql编程经典入门

    在 Oracle PL/SQL 中,简单程序通常指的是基本的 SQL 查询语句,用于检索数据库中的数据。例如,根据特定条件筛选记录。 ##### 示例 - **查询薪资超过 1500 的员工信息**: ```sql SELECT * FROM emp WHERE sal &gt;...

    Oracle PL SQL Recipes.pdf

    通过使用PL/SQL,开发者可以创建存储过程、函数、触发器等,并能在数据库内执行复杂的逻辑处理。 #### 三、书籍核心章节及知识点 ##### 第一部分:基础知识 - **PL/SQL基础语法**:包括变量声明、数据类型、流程...

    pl sql示例

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言元素结合在一起,为数据库管理提供了丰富的功能。在Oracle数据库环境中,PL/SQL是开发高效、可靠和可维护的数据库应用的关键工具。以下是对给定文件中涉及...

    Oracle数据库第5讲.pptx

    2. **模块化设计**:通过PL/SQL,开发者可以创建存储过程,将复杂的业务逻辑封装成独立的模块,如分页、订单处理或转账等,使得代码更易于管理和维护。 3. **减少网络传输**:通过将大量操作集中在服务器端执行,...

    通用ORACLE存储过程实现分页和查询

    总结来说,Oracle存储过程实现分页查询的关键在于动态构造SQL语句,结合ROWNUM或ROW_NUMBER()来实现分页。理解这一机制有助于我们在处理大量数据时编写高效、可复用的代码。在实际应用中,根据具体需求和数据库设计...

    利用PLSQL实现分页查询代码.rar

    在Oracle数据库管理中,PL/SQL(Procedural Language/Structured Query Language)是Oracle提供的一种过程化语言,它结合了SQL的查询能力与程序设计语言的功能。本压缩包"利用PLSQL实现分页查询代码.rar"主要关注的...

    orcal存储过程查询分页

    orcale存储过程分页,在pl/sql developer环境下

    sql oracle bootstrap海量存储过程jquery分页

    标题中的“sql oracle bootstrap海量存储过程jquery分页”揭示了几个关键知识点,这些知识点主要集中在数据库操作、前端展示以及分页技术上。首先,我们来深入理解这些概念: 1. **Oracle**:Oracle是一种关系型...

    java调用PLSQL分页过程.doc

    ### Java调用PL/SQL分页过程详解 #### 一、背景介绍 在现代软件开发中,Java 和数据库之间的交互非常频繁。对于大型系统来说,数据处理能力是至关重要的,尤其是在处理大量数据时,如何有效地分页显示这些数据是一...

    Oracle数据库第5讲.ppt

    2. 模块化设计:PL/SQL使得复杂的业务逻辑可以被封装成独立的模块,如分页过程、订单处理过程和转账过程,便于管理和维护。 3. 减少网络传输:将多次SQL操作合并为一次调用,降低了网络通信的开销。 4. 安全性:通过...

Global site tag (gtag.js) - Google Analytics