就是求排序之后记录的第21-31条显示出来。select * from(select t1.*, row_number() over(order by c DESC) rid from t t1) where rid between 21 and 31;这个sql语句不用子查询,怎么用oracle的函数实现啊?

解决方案 »

  1.   


    给你个例子:
    CREATE OR REPLACE FUNCTION gg(s INT,e INT) RETURN SYS_REFCURSOR AS 
     r_c SYS_REFCURSOR;
    BEGIN
    OPEN r_c FOR
     SELECT ename,empno
       FROM (SELECT ename,empno, ROW_NUMBER() OVER(ORDER BY ENAME) RN FROM SCOTT.EMP T)
      WHERE RN >= S
        AND RN <= E;
    RETURN r_c;
    END;
    /DECLARE
     r_c SYS_REFCURSOR;
     v_c1 VARCHAR2(10);
     v_c2 VARCHAR2(10);
    BEGIN
     r_c:=gg(2,6);
     LOOP
      FETCH r_c INTO v_c1,v_c2;
      EXIT WHEN r_c%NOTFOUND;
      dbms_output.put_Line(v_c1||'-'||v_c2);
     END LOOP;
     CLOSE r_c;
    END;
    /输出:
    ALLEN-7499
    BLAKE-7698
    CLARK-7782
    FORD-7902
    JAMES-7900