首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

这样得排序条件为什么不行呢?小弟我都快要疯了

2012-01-06 
这样得排序条件为什么不行呢?我都快要疯了!我的存储过程如下:CREATEORREPLACEPACKAGEPageTestistypeT_CURS

这样得排序条件为什么不行呢?我都快要疯了!
我的存储过程如下:

CREATE   OR   REPLACE     PACKAGE   PageTest
is
    type   T_CURSOR   is   ref   cursor;
    Procedure   Per_QuickPage
    (
            p_PageSize   in   number,                     --每页记录数
            p_PageNo   in   number,                         --当前页码,从   1   开始
            p_TableName   in   varchar2,               --表名
            p_SqlSelect   in   varchar2,               --查询语句,含排序部分
            p_order     in   varchar,                       --含排序部分
            p_OutRecordCount   out   number,       --返回总记录数
            p_OutCursor   out   T_CURSOR

    );
end   PageTest;


create   or   replace   package   body   PageTest
is
procedure   Per_QuickPage
(
            p_PageSize   in   number,               --每页记录数
            p_PageNo   in   number,                   --当前页码,从   1   开始
            p_TableName   in   varchar2,         --表名
            p_SqlSelect   in   varchar2,         --查询语句,
            p_order     in   varchar,                       --含排序部分
            p_OutRecordCount   out   number,--返回总记录数
            p_OutCursor   out   T_CURSOR
)
as
        v_sql   varchar2(3000);
        v_count   int;
        v_heiRownum   int;
        v_lowRownum   int;
begin
    ----取记录总数
    if   p_SqlSelect   is   not   null   then  
          v_sql   := 'select   count(*)     from   '||   p_TableName   || '     '||   p_SqlSelect   || '     '||   p_order     ;
    else
          v_sql   := 'select   count(*)     from   '||   p_TableName|| '     '||   p_order   ;
    end   if   ;
    execute   immediate   v_sql   into   v_count;
    p_OutRecordCount   :=   v_count;
    ----执行分页查询
    v_heiRownum   :=   p_PageNo   *   p_PageSize;
    v_lowRownum   :=   v_heiRownum   -   p_PageSize   +   1;
    if   p_SqlSelect   is   not   null   then  
    v_sql   :=   'SELECT   *  


                        FROM   (
                                    SELECT   A.*,   rownum   rn  
                                    FROM     '||   p_TableName   ||   '     A   '||   '   '||   p_SqlSelect   || '
                                    and   rownum   <=   '||   to_char(v_heiRownum)   ||   ' '||   p_order   || '
                                  )   B   WHERE   rn   > =   '   ||   to_char(v_lowRownum)   ;  
                                                 
                                 
  else
        v_sql   :=   'SELECT   *  
                        FROM   (
                                    SELECT   A.*,   rownum   rn  
                                    FROM     '||   p_TableName   ||   '     A  
                                    WHERE   rownum   <=   '||   to_char(v_heiRownum)   ||   '   '||   p_order   || '
                                  )   B   WHERE   rn   > =   '   ||   to_char(v_lowRownum)   ;  
    end   if;
   
    OPEN   p_OutCursor   FOR     v_sql;
   
end   Per_QuickPage;
end   PageTest;  


这个存储过程编译可以通过,并且可以取到记录,但是有一个很郁闷的问题,我在.net中使用gridview控件调用这个分页的存储过程,如果可以取到两页的记录,在第一页的时候,这个排序的条件是正确的,但是翻到第二页后,这个排序的条件就不对了,真是郁闷这应该是存储过程的问题吧,,请教各位,改改这个存储过程,得到正确答案,立即结贴!

[解决办法]
把分页中的
rownum rn
改成 row_number() over(order by p_order)

感觉是你没排序就rownum,这个不是你想要的结果


试下
[解决办法]
或者多套层在写rownum
象我下面写的那样,你试下
'SELECT *
FROM (
SELECT A.*, rownum rn from
(
select * FROM '|| p_TableName || ' A '|| ' '|| p_SqlSelect || ' '|| p_order
)
where rownum <= '|| to_char(v_heiRownum)
) B WHERE rn > = ' || to_char(v_lowRownum) ;


最后看下http://blog.sina.com.cn/u/499de7810100093o


[解决办法]
哈哈,我的Oracle也丢了一年多罗
[解决办法]
改为:
v_heiRownum := p_PageNo * p_PageSize + 1; //必须加1,不然始终是(整数)上一页的最后一条
v_lowRownum := v_heiRownum - p_PageSize + 1;
[解决办法]
说错了,单数
[解决办法]
搞.NET的 oracle好的估计不多 我也N久不用了
[解决办法]
SELECT *
FROM (
SELECT * from
(
select A.*,rownum as rn FROM '|| p_TableName || ' A '|| ' '|| p_SqlSelect || ' '|| p_order
)
where rn < '|| to_char(v_heiRownum)
) B WHERE rn > = ' || to_char(v_lowRownum) ;

要把rownum写在最里面,我开始写错了,不好意思!现在的是对的了,或者看我贴的那文章
[解决办法]
学习
[解决办法]
oracle丢了好久了,很多东西都想不起了
[解决办法]
oracle 和它不熟...
[解决办法]
呵呵 我认识oracle,它不认识我! ……
[解决办法]
Studying~~!
[解决办法]
真够我学的

热点排行