//访问Oracle的存储过程并获取返回结果
using (OracleConnection cn = new OracleConnection(ConnectionStringLocalTransaction))
{
OracleParameter[] parameters ={
new OracleParameter("p_table_name",OracleType.VarChar,40), //输入参数
new OracleParameter("p_succ",OracleType.VarChar,20) //输出参数,必须跟存储过程里的一样
};
parameters[0].Value = "Value"; //输入参数的值
parameters[0].Direction = ParameterDirection.Input; //设置为输入参数
parameters[1].Direction = ParameterDirection.Output; //设置为输出参数
string queryString = "processing"; //存储过程名
OracleCommand cmd = new OracleCommand(queryString, cn);
cmd.CommandType = CommandType.StoredProcedure;
foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
cn.Open();
cmd.ExecuteNonQuery();
string ss = cmd.Parameters["p_succ"].Value.ToString();
cn.Close();
}
//注:也可以分离开来,将赋值完的参数 传递到 数据库访问层去 (string spname, string rtvaluename, params OracleParameter[] commandParameters)
//获取 字符串长度中文占2个 int s=System.Text.Encoding.GetEncoding("gb2312").GetByteCount(day.Trim());
//Oracle分页(每次只取区间,因为一般使用Oracle数据量肯定很大,所以不可能一次取出所有数据)
select * from (select rownum q,t.* from (select * from tb1) t) t2 where q between 1 and 15)
Oracle:
方法一:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21;
方法二:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
)
WHERE RN between 21 and 40
公认第二种方法效率没有第一种高。原因是第二种要把子查询执行完,而第一种方法子查询执行到Rownum=40后就结束了。
Posted on
2008-03-17 15:43Caizhanshu'sBlog阅读(337) 评论(
2)
编辑收藏
因为oracle 中的存储过程无法像SQLServer的存储过程直接返回结果集,所以要返回结果集就得使用引用游标,
首先定义一个包,在包中定义一个引用游标。
createorreplacepackagepkg_queryas
typecur_queryisrefcursor;
endpkg_query;
创建实现分页的存储过程:
CREATEORREPLACEPROCEDUREprc_query
(p_tableNameinvarchar2,--表名
p_strWhereinvarchar2,--查询条件
p_orderColumninvarchar2,--排序的列
p_orderStyleinvarchar2,--排序方式
p_curPageinoutNumber,--当前页
p_pageSizeinoutNumber,--每页显示记录条数
p_totalRecordsoutNumber,--总记录数
p_totalPagesoutNumber,--总页数www@bitscn@com
v_curoutpkg_query.cur_query)--返回的结果集
IS
v_sqlVARCHAR2(1000):='';--sql语句
v_startRecordNumber(4);--开始显示的记录条数
v_endRecordNumber(4);--结束显示的记录条数
BEGIN
--记录中总记录条数
v_sql:='SELECTTO_NUMBER(COUNT(*))FROM'||p_tableName||'WHERE1=1';
IFp_strWhereISNOTNULLorp_strWhere<>''THEN
v_sql:=v_sql||p_strWhere;
ENDIF;
EXECUTEIMMEDIATEv_sqlINTOp_totalRecords;
--验证页面记录大小
IFp_pageSize<0THEN
p_pageSize:=0;
ENDIF;
--根据页大小计算总页数
IFMOD(p_totalRecords,p_pageSize)=0THEN
p_totalPages:=p_totalRecords/p_pageSize;
ELSE
p_totalPages:=p_totalRecords/p_pageSize+1;
ENDIF;
--验证页号
IFp_curPage<1THEN
p_curPage:=1;
ENDIF;
IFp_curPage>p_totalPagesTHEN
p_curPage:=p_totalPages;
ENDIF;
--实现分页查询
v_startRecord:=(p_curPage-1)*p_pageSize+1;
v_endRecord:=p_curPage*p_pageSize;
v_sql:='SELECT*FROM(SELECTA.*,rownumrFROM'||
'(SELECT*FROM'||p_tableName;
IFp_strWhereISNOTNULLorp_strWhere<>''THEN
v_sql:=v_sql||'WHERE1=1'||p_strWhere;
ENDIF;
IFp_orderColumnISNOTNULLorp_orderColumn<>''THEN
v_sql:=v_sql||'ORDERBY'||p_orderColumn||''||p_orderStyle;
ENDIF;
v_sql:=v_sql||')AWHERErownum<='||v_endRecord||')BWHEREr>='
||v_startRecord;
DBMS_OUTPUT.put_line(v_sql);
OPENv_curFORv_sql;
ENDprc_query;
分享到:
相关推荐
此文档,充分讲解了orcale分页原理,即不同方式的优缺点,特别适合初学者。总结的相当透彻!
kettle oracle循环分页迁移数据的完整例子,生成txt后FTP上传到远程服务器
一个PHP开发Oracle数据库分页显示的PHP类,可以作为入门级Oracle开发资料收存
java实现oracle分页策略完整版,可当做参考类使用,有详细注释,适合初学者。
源代码实现的实在Java web与Oracle数据开发过程中的分页功能,代码不难,看看就能看懂,使用其中的核心代码能够轻易实现分页功能。希望对初学者有一定的帮助。
Oracle 分页实例 带分页控件用法 Oracle 实现数据列表分页。
oracle分页查询并返回总记录数据的存储过程
Oracle 10g数据库海量数据分页查询优化.pdf
mybatis 分页 mybatis-generate Oracle数据库 大家知道mybatis自动生成代码是没有分页功能的 我在网上找了很久 有很多内容 但正真可以使用的少之又少 本人整合了网上的资源 整理了基于Oracle数据库的mybatis插件 ...
Oracle分页存储过程,根据指定条件分页 并附上使用示例(C#代码) 注:不能查询视图或者包含distinct、group by、inner join的子句
解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题
本例子使用简单的SQL语句实现Oracle数据库的分页动作。它没有使用PL/SQL语句(比如什么程序包、游标等),只是使用通用的、简单的SQL实现了数据库分页动作。 只要看懂了分页公式,那么这是一个通用的Oracle数据库...
1、请先在Oracle数据中新建存储过程 2、修改代码中的相关参数。比如,连接数据库字符串,查询的sql语句等 注意:查询sql语句中必须包含rownum字段,别名是rn。rownum是Oracle关键字。 存储是来自...
oracle实现分页,代码完整,直接可以用
Oracle分页查询(很不错的介绍) 保证不会让你失望
本文将分别展示使用rownum伪列和row_number()分析函数来完成Oracle数据分页操作的具体使用方法,并分析和比较两者的性能优劣。 一、初始化测试数据 首先测试数据我选取了数据字典all_objects表中的70000条数据,创建...
经过项目测试,copy可以直接运用到项目中,我测试的是1千2百万数据。 如果有更好的分页,可以相互交流一下,谢谢。
Java海量数据分页Bean, 适用于Oracle(适当修改,适用于任何数据库).功能描述:传入到达页码(具有容错性)、每页记录数、Select查询语句,返回该页所有的记录(整页是List集合,每条记录是一个 HashMap)、总行数、总...
该控件采用JSP的include实现常见的数据分页,支持oracle,sql server,mysql 等数据库,可以直接用于项目。
通过浏览器访问数据量大的表时需要进行分页。ASP对数据库记录分页显示可以通过ADO对象集Recordset对象...本文将介绍一种利用 ASP实现对Oracle数据记录分页显示的方法,使得Oracle用户能够轻松方便地实现记录分页显示。