存储过程返回结果集

drop package NMS.PROC_PUGROUP_pkg
commit;

CREATE OR REPLACE PACKAGE NMS.PROC_PUGROUP_pkg
IS
TYPE o_CURSOR IS REF CURSOR;
PROCEDURE PROC_PU_PUGROUP
(p_groupId VARCHAR2,minrow in number,maxrow in number,t_CURSOR OUT o_CURSOR);
END;
CREATE OR REPLACE PACKAGE BODY PUGROUP_pkg
IS
PROCEDURE NMS.PROC_PU_PUGROUP(
       p_groupId VARCHAR2,
       minrow in number,
       maxrow in number,
       t_CURSOR out o_CURSOR,
       ) IS
        sqlstr VARCHAR2(4000) :='';
       CURSOR cur_group IS select device_id from pu_group where group_id=p_groupId;
BEGIN
 LOOP
    FETCH cur_group INTO  deviceId;
    IF(sqlstr<>'') THEN
      sqlstr :=sqlstr||'union';
    END IF;
    sqlstr :=sqlstr || 'select device_id from pu_info where device_id like ''||deviceId ||''';
END LOOP;
CLOSE cur_group;

 

END PROC_PU_PUGROUP;

 

 

CREATE OR REPLACE FUNCTION GetPuGroup(   
       p_groupId VARCHAR2,
       minrow in number,
       maxrow in number
)return SYS_REFCURSOR   
IS   
    outCursor SYS_REFCURSOR; --输出的游标   
     sqlstr VARCHAR2(4000) :='';
    CURSOR cur_group IS select device_id from pu_group where group_id=p_groupId;
BEGIN   

    LOOP
        FETCH cur_group INTO  deviceId;
        IF(sqlstr<>'') THEN
            sqlstr :=sqlstr||'union';
        END IF;
        sqlstr :=sqlstr || 'select device_id from pu_info where device_id like ''||deviceId ||''';
    END LOOP;
    CLOSE cur_group;
    sqlstr :='select * from ('||sqlstr||') where rownum<='||maxrow ||'and rownum >='||minrow;
    EXECUTE   IMMEDIATE   'OPEN   outCursor   FOR '||sqlstr;  
    return outCursor;   
END;

你可能感兴趣的:(存储过程)