oracle ajax储存过程分页,创建 Oracle 分页存储过程
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 分页存储过程相关推荐
- (第十四章)创建储存过程与创建函数
函数与存储过程的区别 存储过程:0至N个返回,是适合做批量插入,批量更新 函数:1个返回(不能0个与多个),适合做处理数据后返回一个结果 存储过程调用语法 :call 存储过程名(实参列表); 函数调 ...
- oracle对象类型_如何创建Oracle类型对象
oracle对象类型 Today we will learn how to create Oracle Type Object. If you are working on a large proje ...
- Oracle 利用储存过程插入循环插入大量数据方法
当我们进行测试数据或者进行某种大数据量的时候,可以用一下语句进行大批量插入, 通过我的测试,10万条数据插入时间为7秒左右,100万条记录插入时间为65秒,200万插入为150秒. 我机器配置为 CP ...
- oracle中备份表的创建,ORACLE DB创建步骤-运用冷备份和RMAN
u RMAN创建数据库 1.环境的准备 ² 在新建立数据库的机器上申请在DBA组的ORACLE OWNER 用户名必须与原数据库的ORACLE OWNER 相同. ² 安装ORACLE 软件,安 ...
- navicat创建oracle数据表,使用navicat创建Oracle数据库
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 navicat 11.0.7 Oracle 11.2 0.第一次登录,与plsql相同,以管理员身份登录 图0.1 ...
- educoder 数据库系统概论2022 SQLServer 储存过程的创建与使用
任务描述 本关任务:学习 SQLServer 中存储过程的创建和使用. 相关知识 存储过程提供了很多 T-SQL 语言没有的高级特性,其传递参数和执行逻辑的能力,为处理各种复杂任务提供了支持.并且,由 ...
- oracle学生成绩表的创建,oracle如何创建视图(1)创建视图V_StudInfo,查询学生的学号,姓名,所修课程号,所修课程名称,成绩等级(9...
共回答了20个问题采纳率:95% 1 create view V_StudInfo as select a.学号,a.姓名,b.课程号,b.课程名, case when c.成绩 between 90 ...
- mysql储存过程编程,MySQL 5.0存储过程编程入门
首先看MySQL 5.0参考手册中关于创建存储过程的语法说明: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_ ...
- oracle utl_smtp,Oracle 11g 环境下,利用utl_smtp创建发送邮件的存储过程
网上太多发邮件储存过程,我就不转发了,弄个简单的作为示例: create or replace procedure Send_mail(mail_body varchar2) is smtp_conn ...
最新文章
- 你好,C++(18) 到底要不要买这个西瓜?4.1.6 操作符之间的优先顺序
- wait_timeout【Mysql】解决方案
- 连接maven_Maven系列——超简单入门级教程
- int 取值范围_一定范围内的随机数
- Nacos 集群整合 Nginx 实现反向代理、负载均衡_03
- Vue的基础认知二---vue的双向绑定/vue获取DOM节点
- 设计模式-17-迭代器
- 【数据挖掘】缺失数据
- SylixOS IO层源代码解析
- Matlab之聚类分析
- 2021年武大计算机学院研究生,武汉大学
- 计算机及数码产品营销课后题,职业教育课程改革创新系列教材:计算机及数码产品营销...
- java 调用 yed 绘制 流程图_流程图绘制软件──yEd
- 回首150年炒股史 | 消灭散户的终极武器竟然是“它”?!
- VirtualBox安装Win7后提示无法启动,以及0xc0000225错误的解决
- 如何从一个完全自动化的交易系统获利
- 实验八、ADC0809模数转换器的使用
- c++学习-基础-异常
- pytorch加速下载方法
- C++中虚函数继承类的内存占用大小计算
热门文章
- 不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug
- python实验收获和建议_python实验收获与反思 100字_考试后的反思100字
- java 弹出下载_java如何实现下载弹出的对话框
- mysql tags_mysql tags table解决方法
- 10个可以快速用Python进行数据分析的小技巧
- vue 数字变星号 过滤器_Vue自定义过滤器格式化数字三位加一逗号
- httpd开启status模块_Nginx高并发系列之二——Nginx开启ssl模块
- python1080p壁纸高清图片_Python爬取高清桌面壁纸(附源码),直接运行即可
- 高斯分布 (Gaussian distribution)
- CLR查找和加载程序集的方式(二) 流程图