CYQ.Data 数据层框架

CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。

CYQ.Data 数据框架 Oracle 分页存储过程

框架原理 | | | 发表日期 :2011/5/18 2:04:31#楼主  

下面是CYQ.Data 数据框架在 Oracle 的 分页存储过程 的代码:

请分开两次执行,先创建Package,再创建存储过程。

create or replace package MyPackage as 
type MyCursor 
is ref cursor
;
procedure SelectBase(pageIndex int,pageSize int,tableName varchar2,whereStr varchar2
,
  resultCount out 
int
, resultCursor out MyCursor);
end
 MyPackage;
--先执行上面的,再执行下面的

create or replace package Body MyPackage is

procedure SelectBase(pageIndex int,pageSize int,tableName varchar2,whereStr varchar2,
  resultCount out 
int
, resultCursor out MyCursor)
  
is

  
--定义变量
  newtableName varchar2(4000);
  rowStart  
int
;
  rowEnd    
int
;
  mySql 
varchar2(8000
);
  whereOnly 
varchar2(8000
);
  OrderOnly 
varchar2(400
);
  
begin

    newtableName:
=tableName;
    mySql:
='select count(*) from '||
tableName;

    
    
if whereStr is not null and length(whereStr)>0

      
then
          rowStart:
=instr(whereStr,'order by');
         
if rowStart>0
 
          
then

            whereOnly:
=substr(whereStr, 1,rowStart-1);    --取得条件 
            OrderOnly:=substr(whereStr,rowStart, length(whereStr)-rowStart+1);    --取得排序方式(order by 字段 方式) 
          else
            whereOnly:
=whereStr;
            OrderOnly:
=''
;
            
end if
;
           whereOnly:
=' where '||
 whereOnly;
           mySql:
=mySql||
whereOnly;
         
     
end if
;
     
execute immediate mySql into
 resultCount;
       
-- dbms_output.put_line('查询总条数SQL=>'||whereStr||'--'||mySql||resultCount); 

    --执行查询,查询总条数 
           


            
--不分页查所有

          
        
if pageIndex=0 and pageSize=0
    
        
then
 
        mySql:
='select * from '||tableName||whereOnly||
OrderOnly;
       
else

--计算起始和结束索引

        rowStart:
=(pageIndex-1)*pageSize+1
        rowEnd:
=rowStart+pageSize-1
;
        mySql:
='select * from (select t.*,RowNum as rn from (select * from '||newtableName||whereOnly||OrderOnly||') t) where rn between '||rowStart||' and '||
rowEnd;
      
        
end if
;
    
open ResultCursor for
 mySql;
   
--dbms_output.put_line('SQL=>'||mySql); 

    end SelectBase;
  
end MyPackage;


新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"
游客[注册][182.151.214.*]2011/7/31 16:08:02#2
一些简单的应用还行, 如果我要关联多张表就不行了。
回复将多表查询语句加括号成视图就可以了。
游客[注册][60.30.33.*]2011/7/26 10:13:09#1
C#中如何调用呢?
回复和传统的存储过程调用一样!你可以搜索一下!或者下载CYQ.Data V3.0的源码看!

发表评论

论坛公告

    数据框架 CYQ.Data QQ群:6033006
    使用本框架进行开发,入门简单,开发效率高,性能优越,更有详尽的API文档,有相关的使用帮助文章、示例文章、更甚有相关的视频教程及辅助工具。 关键还是免费与开源,实在是居家旅行、项目开发、学习研究的必备良品!!!!!!


    在线帮助:欢迎联系

帖子搜索