最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

创建Oracle分页存储过程

来源:动视网 责编:小采 时间:2020-11-09 10:06:00
文档

创建Oracle分页存储过程

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


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分页存储过程

创建Oracle分页存储过程:1.创建Oracle包的定义。使用 REF CURSOR 数据类型来处理 Oracle 结果集。REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针。与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用 1.创建Oracle包的定义。使用 REF CURSOR
推荐度:
标签: 创建 oracle 分页
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top