1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用

1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用

1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用,可以在执行时将其设置为指向不同的结果集。使用 REF CURSOR 输出参数可以将 Oracle 结构化程序的结果集传递回调用应用程序。通过在调用应用程序中定义 OracleType.Cursor 数据类型的输出参数,可以访问 REF CURSOR 所指向的结果集。

create or replace package MF_PAK_001 is

type t_cursor is ref cursor;

procedure GetDataByPage(

p_tableName varchar2,

p_fields varchar2,

p_filter varchar2,

p_sort varchar2,

p_curPage number,

p_pageSize number,

p_cursor out t_cursor,

p_totalRecords out number

);

end MF_PAK_001;2.创建包体。在包体中实现具体的存储过程。

create or replace package body MF_PAK_001 is

procedure GetDataByPage(

p_tableName varchar2,--要查询的表名

p_fields varchar2,--要查询的字段

p_filter varchar2,--过滤条件

p_sort varchar2,--排序字段及方向

p_curPage number,

p_pageSize number,

p_cursor out t_cursor,

p_totalRecords out number

)

is

v_sql varchar2(1000):='';

v_startRecord number(4);

v_endRecord number(4);

begin--获取总的记录数

v_sql:=' to_number(count(*)) from '||p_tableName;

if p_filter is not null then

v_sql:=v_sql||' where 1=1 and '||p_filter;

end if;

execute immediate v_sql into p_totalRecords;

v_startRecord:=(p_curPage-1)*p_pageSize;

v_endRecord:=p_curPage*p_pageSize;

v_sql:='select '||p_fields||' from (select '||p_fields||',rownum r from '||

'(select '||p_fields||' from '||p_tableName;

if p_filter is not null then

v_sql:=v_sql||' where 1=1 and '||p_filter;

end if;

if p_sort is not null then

v_sql:=v_sql||' order by '||p_sort;

end if;

v_sql:=v_sql||') A where rownum<='||to_char(v_endRecord)||') B where r>='||to_char(v_startRecord);

open p_cursor for v_sql;

end GetDataByPage;

end MF_PAK_001;3.在Oracle中编写查询语句,执行包体中的分页存储过程,看是否能够正确执行。

declare

v_cur MF_PAK_001.t_cursor;

v_job jobs%rowtype;

v_totalRecords number;

begin

MF_PAK_001.GetDataByPage('jobs','job_id,job_title,min_salary,max_salary','min_salary>0','job_id asc',

1,10,v_cur,v_totalRecords);

fetch v_cur into v_job;

while v_cur%found loop

dbms_output.put_line(v_job.job_id||','||v_job.job_title);

fetch v_cur into v_job;

end loop;

dbms_output.put_line('总记录数为:'||v_totalRecords);

end;4.在.NET中调用该分页存储过程。

string connString = "Data Source=ORCL;User Id=hr;Password=Pwd123456";

OracleConnection conn = new OracleConnection(connString);

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;

cmd.CommandText = "MF_PAK_001.GetDataByPage";

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("p_tableName", OracleType.VarChar).Value = "jobs";

cmd.Parameters.Add("p_fields", OracleType.VarChar).Value = "job_id,job_title,min_salary,max_salary";

cmd.Parameters.Add("p_filter", OracleType.VarChar).Value = "";

cmd.Parameters.Add("p_sort", OracleType.VarChar).Value = "job_id asc";

cmd.Parameters.Add("p_curPage", OracleType.Number).Value = 1;

cmd.Parameters.Add("p_pageSize", OracleType.Number).Value = 10;

cmd.Parameters.Add("p_cursor", OracleType.Cursor).Direction =ParameterDirection.Output;

cmd.Parameters.Add("p_totalRecords", OracleType.Number).Direction = ParameterDirection.Output;

conn.Open();

OracleDataReader dr = cmd.ExecuteReader();

while (dr.Read())

{

for (int i = 0; i < dr.FieldCount; i++)

Response.Write(dr[i].ToString() + ";");

Response.Write("

");

}

conn.Close();

oracle ajax储存过程分页,创建 Oracle 分页存储过程相关推荐

  1. (第十四章)创建储存过程与创建函数

    函数与存储过程的区别 存储过程:0至N个返回,是适合做批量插入,批量更新 函数:1个返回(不能0个与多个),适合做处理数据后返回一个结果 存储过程调用语法 :call 存储过程名(实参列表); 函数调 ...

  2. oracle对象类型_如何创建Oracle类型对象

    oracle对象类型 Today we will learn how to create Oracle Type Object. If you are working on a large proje ...

  3. Oracle 利用储存过程插入循环插入大量数据方法

    当我们进行测试数据或者进行某种大数据量的时候,可以用一下语句进行大批量插入, 通过我的测试,10万条数据插入时间为7秒左右,100万条记录插入时间为65秒,200万插入为150秒. 我机器配置为 CP ...

  4. oracle中备份表的创建,ORACLE DB创建步骤-运用冷备份和RMAN

    u  RMAN创建数据库 1.环境的准备 ²  在新建立数据库的机器上申请在DBA组的ORACLE OWNER 用户名必须与原数据库的ORACLE OWNER 相同. ²  安装ORACLE 软件,安 ...

  5. navicat创建oracle数据表,使用navicat创建Oracle数据库

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 navicat 11.0.7 Oracle 11.2 0.第一次登录,与plsql相同,以管理员身份登录 图0.1 ...

  6. educoder 数据库系统概论2022 SQLServer 储存过程的创建与使用

    任务描述 本关任务:学习 SQLServer 中存储过程的创建和使用. 相关知识 存储过程提供了很多 T-SQL 语言没有的高级特性,其传递参数和执行逻辑的能力,为处理各种复杂任务提供了支持.并且,由 ...

  7. oracle学生成绩表的创建,oracle如何创建视图(1)创建视图V_StudInfo,查询学生的学号,姓名,所修课程号,所修课程名称,成绩等级(9...

    共回答了20个问题采纳率:95% 1 create view V_StudInfo as select a.学号,a.姓名,b.课程号,b.课程名, case when c.成绩 between 90 ...

  8. mysql储存过程编程,MySQL 5.0存储过程编程入门

    首先看MySQL 5.0参考手册中关于创建存储过程的语法说明: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_ ...

  9. oracle utl_smtp,Oracle 11g 环境下,利用utl_smtp创建发送邮件的存储过程

    网上太多发邮件储存过程,我就不转发了,弄个简单的作为示例: create or replace procedure Send_mail(mail_body varchar2) is smtp_conn ...

最新文章

  1. 你好,C++(18) 到底要不要买这个西瓜?4.1.6 操作符之间的优先顺序
  2. wait_timeout【Mysql】解决方案
  3. 连接maven_Maven系列——超简单入门级教程
  4. int 取值范围_一定范围内的随机数
  5. Nacos 集群整合 Nginx 实现反向代理、负载均衡_03
  6. Vue的基础认知二---vue的双向绑定/vue获取DOM节点
  7. 设计模式-17-迭代器
  8. 【数据挖掘】缺失数据
  9. SylixOS IO层源代码解析
  10. Matlab之聚类分析
  11. 2021年武大计算机学院研究生,武汉大学
  12. 计算机及数码产品营销课后题,职业教育课程改革创新系列教材:计算机及数码产品营销...
  13. java 调用 yed 绘制 流程图_流程图绘制软件──yEd
  14. 回首150年炒股史 | 消灭散户的终极武器竟然是“它”?!
  15. VirtualBox安装Win7后提示无法启动,以及0xc0000225错误的解决
  16. 如何从一个完全自动化的交易系统获利
  17. 实验八、ADC0809模数转换器的使用
  18. c++学习-基础-异常
  19. pytorch加速下载方法
  20. C++中虚函数继承类的内存占用大小计算

热门文章

  1. 不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug
  2. python实验收获和建议_python实验收获与反思 100字_考试后的反思100字
  3. java 弹出下载_java如何实现下载弹出的对话框
  4. mysql tags_mysql tags table解决方法
  5. 10个可以快速用Python进行数据分析的小技巧
  6. vue 数字变星号 过滤器_Vue自定义过滤器格式化数字三位加一逗号
  7. httpd开启status模块_Nginx高并发系列之二——Nginx开启ssl模块
  8. python1080p壁纸高清图片_Python爬取高清桌面壁纸(附源码),直接运行即可
  9. 高斯分布 (Gaussian distribution)
  10. CLR查找和加载程序集的方式(二) 流程图