您的位置:首页 > 数据库 > Oracle

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

2017-05-10 11:03 363 查看
/***
存储过程名称:
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)
AS
BEGIN
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: