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

oralce中,写个简单的分页的sql

2012-08-27 
oralce中,写个简单的分页的sql,在线等有个user表mysql这样查,用来分页,5 8是传入的参数select * from user

oralce中,写个简单的分页的sql,在线等
有个user表
mysql这样查,用来分页,5 8是传入的参数
select * from user limit 5,8;

这个sql,在oracle中怎么写呢


[解决办法]

SQL code
select t.*from(select s.*,rownum rnfrom s_user s ) twhere t.rn between 5 and 8
[解决办法]
探讨

SQL code

select t.*
from(
select s.*,rownum rn
from s_user s ) t
where t.rn between 5 and 8

[解决办法]
SQL code
/*      用于分页的方法       TABLE_NAME_IN                  表名(只支持单表,多表时请用视图封装)      SQL_WHERE                      条件语句 例如 : where n_xh < 200      SQL_ORDERBY             order by 语句 例如 : order by n_xh desc      IDX_PAGE_IN                    请求的页数      CURR_PAGE_COUNT_IN             每页的行数      return 结果集动态游标  包含表或者视图中的所有字段 加上下列5个字段             行序号           PROW                         当前页数         dqys 没有数据时 为 0              总页数           zys  没有数据时 为 0             每页个数         mygs 没有数据时 为 0             总个数           zgs  没有数据时 为 0    */    FUNCTION CURRENT_PAGE(TABLE_NAME_IN      IN VARCHAR2,                          SQL_WHERE          IN VARCHAR2,                          SQL_ORDERBY        IN VARCHAR2,                          IDX_PAGE_IN        NUMBER,                          CURR_PAGE_COUNT_IN NUMBER) RETURN SYS_REFCURSOR IS      CURR_ORDERBY_V          VARCHAR2 (2000) ;          --动态SQL的orderby条件语句      CURR_SQL_V              VARCHAR2 (20000) ;         --分页语句动态SQL      CURR_COUNT_SQL_V        VARCHAR2 (20000) ;         --封装了查询数量SQL      CURR_NONEDATA_SQL_V     VARCHAR2 (2000) := 'SELECT  0 AS DQYS , 0 AS ZYS , 0 AS MYGS , 0 AS ZGS FROM DUAL ';  --没有数据时返回结果集的SQL      PAGE_NOW_N              NUMBER ;                   --当前页数      PAGE_SUM_N              NUMBER ;                   --总页数      PAGE_DATA_EVERYCOUNT_N  NUMBER ;                   --每页个数      PAGE_DATA_SUM_COUNT_N   NUMBER ;                   --总个数      MIN_IDX_N               NUMBER ;                   --最小开始序号      RS_REFCUR               SYS_REFCURSOR ;            --结果集返回游标          BEGIN      CURR_COUNT_SQL_V := 'SELECT COUNT(*) AS GS FROM '||TABLE_NAME_IN||' TT '||SQL_WHERE ;      BEGIN        EXECUTE IMMEDIATE CURR_COUNT_SQL_V INTO PAGE_DATA_SUM_COUNT_N ;  --得到总个数      EXCEPTION              --表或视图不存在错误截获          WHEN OTHERS THEN        PAGE_DATA_SUM_COUNT_N := 0 ;      END ;      IF PAGE_DATA_SUM_COUNT_N = 0 THEN         CURR_SQL_V := CURR_NONEDATA_SQL_V ;      ELSE                IF SQL_ORDERBY IS NOT NULL THEN          CURR_ORDERBY_V := SQL_ORDERBY || ', ROWID DESC ' ;                  --ORDER BY 后面加上rowid排序,防止分页语句bug        END IF ;        IF CURR_PAGE_COUNT_IN IS NULL OR CURR_PAGE_COUNT_IN = 0 THEN          PAGE_DATA_EVERYCOUNT_N := 20 ;                                      --默认为每页20条        ELSE          PAGE_DATA_EVERYCOUNT_N := CURR_PAGE_COUNT_IN ;        END IF ;                PAGE_SUM_N := FLOOR (PAGE_DATA_SUM_COUNT_N/PAGE_DATA_EVERYCOUNT_N) ;  --小数点截掉        IF PAGE_DATA_SUM_COUNT_N MOD PAGE_DATA_EVERYCOUNT_N <> 0 THEN         --判断总数和页面个数是否可以整除,如果不可以整除则总页数加1          PAGE_SUM_N := PAGE_SUM_N +1 ;        END IF ;        PAGE_NOW_N := NVL(IDX_PAGE_IN,1) ;                     --当前页码        IF PAGE_NOW_N > PAGE_SUM_N THEN                        --如果当前页数大于总页数  那么使当前页数等于总页数          PAGE_NOW_N := PAGE_SUM_N ;        END IF ;        MIN_IDX_N := (PAGE_NOW_N - 1)*PAGE_DATA_EVERYCOUNT_N ; --结果集最小开始rownum        --封装语句        CURR_SQL_V := 'SELECT  '||PAGE_NOW_N||' AS DQYS , '||PAGE_SUM_N||' AS ZYS , '||PAGE_DATA_EVERYCOUNT_N||' AS MYGS , '||PAGE_DATA_SUM_COUNT_N||' AS ZGS , FYB.*                          FROM                          (                           SELECT ROWNUM AS PROW , TTT.* FROM                             (SELECT  TT.*                                  FROM '||TABLE_NAME_IN||' TT '                                       ||SQL_WHERE||' '||CURR_ORDERBY_V||'                             )TTT                         )                         FYB                        WHERE FYB.PROW>'||MIN_IDX_N||' AND ROWNUM <='||PAGE_DATA_EVERYCOUNT_N;      END IF ;      OPEN RS_REFCUR FOR CURR_SQL_V ;  --打开动态游标      RETURN RS_REFCUR ;               --返回    END CURRENT_PAGE; 


[解决办法]
一般是这么写吧


select * from (
select t.*,rownum rn from table t where rownum <= 5 ) tt
where tt.rn >= 8;


[解决办法]

探讨

一般是这么写吧


select * from (
select t.*,rownum rn from table t where rownum <= 5 ) tt
where tt.rn >= 8;

[解决办法]
做分页 不加order by有含义么 也可以使用分析函数
[解决办法]
探讨

SQL code

select t.*
from(
select s.*,rownum rn
from s_user s ) t
where t.rn between 5 and 8

热点排行