原来一直用sqlserver,最近有一个项目需要转移到oracle上来,在ms sql里,有一个分页的存储过程,
在oracle里不知道有没有(有时候需要去超多的数据里找出十条),还有,oracle里是不是一般不用存储过程返回数据集(为了效率,好像用游标也可以返回),一般都用视图返回数据集吗?
看了一些简单的入门教程,还是一头雾水,呵呵,还望各位不吝赐教

解决方案 »

  1.   

    oracle里分页,最重要的就是用ROWNUM来控制 
    其它不清楚,没做过分页的存储过程
      

  2.   

    给你个例子: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 SCOTT.EMP
         WHERE ROWID IN (SELECT RID
                           FROM (SELECT ROWNUM RNO, ROWID RID
                                   FROM (SELECT ROWID
                                           FROM SCOTT.EMP
                                          ORDER BY ENAME)
                                  WHERE ROWNUM <= E)
                          WHERE RNO >= S);
      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;
    /输出:
    BLAKE-7698
    CLARK-7782
    FORD-7902
    JAMES-7900
    JONES-7566
      

  3.   

    google ..http://blog.csdn.net/Inber/archive/2006/12/14/1442502.aspx
      

  4.   

    用包和包体定义一个TYPE MYCS REF CURSOR 可以实现的
      

  5.   

    分页要用存储过程吗?用rownum就可以了,如果你也会java的话,建议你看一下Hibernate的分页sql代码会对你有帮助的
      

  6.   

    create or replace procedure search(p_mininteger,p_maxinteger,p_rowset out 
    sys_refcursor) 
    is 
    begin 
       select cursor(*) into p_rowset 
          from (select rownumr,all_objects.* from all_objects where rownum <= 
     p_max) t 
        where t.r >= p_min; 
    end search; 

    show errors