ORACLE下存储过程返回查询结果

来源:互联网 发布:单片机书籍 编辑:程序博客网 时间:2024/05/17 22:08
/***  存储过程名称:    p_GroupScore  说明:    团队业绩统计  调用主存储过程:    手工调用    CALL p_GroupScore('E000100')  参数传递:  测试在SQL*PLUS下进行  VAR r refcursor;  Exec p_GroupScore(32,'E000100',:r);  print r;  原型示例  create or replace procedure p_test(p_cur out sys_refcursor)  as  begin       open p_cur for        select '001' XH,'自动化工程系' DM from DUAL       UNION       select '002' XH,'计算机工程系' DM from DUAL       UNION       select '003' XH,'机械工程系' DM from DUAL;  end p_test;  测试在SQL*PLUS下进行  VAR r refcursor;  Exec p_test(:r);  print r;***/CREATE OR REPLACE PROCEDURE p_GroupScore(uISSUE NUMBER,uPID IN VARCHAR2,p_cur out sys_refcursor)ASBEGIN  IF (uPID = 'E000100') THEN    -- 徐桂玲团队    OPEN p_cur for     SELECT FGRADE,FTYPE,SUM(FCOIN) FROM APP_DETAILS WHERE FISSUE = uISSUE AND FTYPE <> '购物币'    AND    FPID IN     (      SELECT FCPID FROM APP_FCT WHERE FFPID = 'E888888' GROUP BY FCPID      UNION      SELECT 'E000100' FROM DUAL      UNION      SELECT 'E888888' FROM DUAL    )    GROUP BY FGRADE,FTYPE    UNION    SELECT FGRADE,FTYPE,SUM(FCOIN) FROM APP_DETAILS WHERE FISSUE = uISSUE AND FTYPE = '店补'    AND    FPID IN     (      SELECT FGETMID(FCPID) FROM       (        SELECT FCPID FROM APP_FCT WHERE FFPID = 'E888888' GROUP BY FCPID        UNION        SELECT 'E000100' FROM DUAL        UNION        SELECT 'E888888' FROM DUAL      )    )    GROUP BY FGRADE,FTYPE    ORDER BY FGRADE;  ELSE    OPEN p_cur for     SELECT FGRADE,FTYPE,SUM(FCOIN) FROM APP_DETAILS WHERE FISSUE = uISSUE AND FTYPE <> '购物币'    AND    FPID IN     (      SELECT FCPID FROM APP_FCT WHERE FFPID = uPID GROUP BY FCPID      UNION      SELECT uPID FROM DUAL    )    GROUP BY FGRADE,FTYPE    UNION    SELECT FGRADE,FTYPE,SUM(FCOIN) FROM APP_DETAILS WHERE FISSUE = uISSUE AND FTYPE = '店补'    AND    FPID IN     (      SELECT FGETMID(FCPID) FROM       (        SELECT FCPID FROM APP_FCT WHERE FFPID = uPID GROUP BY FCPID        UNION        SELECT uPID FROM DUAL      )    )    GROUP BY FGRADE,FTYPE    ORDER BY FGRADE;  END IF;END p_GroupScore;

0 0