浏览 2375 次
锁定老帖子 主题:存储过程查询结果打印很慢,求解
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-15
create or replace procedure sp_tbl_asset_sign ( jie_ASSET_NUM out int,--数量(借方) jie_PRICE out FLOAT, --单价(借方) jie_JINE out FLOAT, --金额(借方) dai_ASSET_NUM out int, --数量(贷方) dai_PRICE out FLOAT , --)单价(贷方) dai_JINE out FLOAT, --金额(贷方) jie_ASSET_NUM_MONTH out int,--数量(借方) jie_PRICE_MONTH out FLOAT, --单价(借方) jie_JINE_MONTH out FLOAT, --金额(借方) dai_ASSET_NUM_MONTH out int, --数量(贷方) dai_PRICE_MONTH out FLOAT, --)单价(贷方) dai_JINE_MONTH out FLOAT, --金额(贷方) SUMPRICE_MONTH out FLOAT, --合计 jie_ASSET_NUM_YEAR out int,--数量(借方) jie_PRICE_YEAR out FLOAT, --单价(借方) jie_JINE_YEAR out FLOAT, --金额(借方) dai_ASSET_NUM_YEAR out INTEGER, --数量(贷方) dai_PRICE_YEAR out FLOAT, --)单价(贷方) dai_JINE_YEAR out FLOAT, --金额(贷方) SUMPRICE_YEAR out FLOAT, --合计 SUMPRICE_LAST_YEAR out FLOAT, --上一年合计 SUMPRICE out FLOAT, --合计 buy_date out Date, --购买日期 ASSET_CODE out VARCHAR2, --凭证号 MODEL1 out VARCHAR2, --摘要 years in varchar2 --年(输入值) ) as startTime varchar2(100); --开始时间(主要为了查询输入时间之前的所有信息) moth1 varchar2(20); --类型 moth2 varchar2(20); --类型 moth3 varchar2(20); --类型 moth4 varchar2(20); --类型 jie_lastSum float; --之前总金额(借方) dai_lastSum float; --之前总金额(贷方) jie_nowSum float; --当前总金额(借方) dai_nowSum float; --当前总金额(贷方) jie_nowNumSum int; --当前数量总数(借方) dai_nowNumSum int; --当前数量总数(贷方) jie_lastNumSum int; --之前数量总数(借方) dai_lastNumSum int; --当前数量总数(贷方) jie_nowSum_month float; --当前总金额(借方) dai_nowSum_month float; --当前总金额(贷方) jie_nowNumSum_month int; --当前数量总数(借方) dai_nowNumSum_month int; --当前数量总数(贷方) begin moth1:='购入'; moth2:='报废'; moth3:='调入'; moth4:='调出'; --初始化数值 jie_lastSum:=0; dai_lastSum:=0; jie_nowSum :=0; dai_nowSum :=0; jie_nowNumSum :=0; dai_nowNumSum :=0; jie_lastNumSum :=0; dai_lastNumSum :=0; select to_char(to_date(mon, 'yyyymmdd'), 'yyyy/mm/dd') into startTime from (select years || to_char(aa, '09') || '01' mon, aa from (select 1 aa from dual )); --查询之前信息 --计算方式:总金额=总金额 + 数量*单价 for lastS in( select * from TBL_ASSET_SIGN where to_char(buy_day,'yyyy/mm/dd') <= startTime and value_4='1' and IS_DELETED='0' and USE_DEPT is not null) loop --如果类型是购入时汇总 if lasts.move_method = moth1 then jie_lastSum :=jie_lastSum + lasts.asset_num * lasts.price; jie_lastNumSum := jie_lastNumSum + lasts.asset_num; --如果类型是调入时汇总 ELSIF lasts.move_method = moth3 then jie_lastSum :=jie_lastSum + lasts.asset_num * lasts.price; jie_lastNumSum := jie_lastNumSum + lasts.asset_num; else dai_lastSum :=dai_lastSum + lasts.asset_num * lasts.price; dai_lastNumSum := dai_lastNumSum + lasts.asset_num; end if; end loop; --之前所有金额计算,公式:借方-贷方 SUMPRICE_LAST_YEAR :=jie_lastSum - dai_lastSum; --当前数据汇总 for dateTimes in ( --遍历12个月份 select to_char(to_date(mon, 'yyyymmdd'), 'yyyy/mm/dd') firstday, to_char(LAST_DAY(to_date(mon, 'yyyymmdd')), 'yyyy/mm/dd') lastday from (select years || to_char(aa, '09') || '01' mon, aa from (select 1 aa from dual union select 2 aa from dual union select 3 aa from dual union select 4 aa from dual union select 5 aa from dual union select 6 aa from dual union select 7 aa from dual union select 8 aa from dual union select 9 aa from dual union select 10 aa from dual union select 11 aa from dual union select 12 aa from dual)))loop --初始化每月的金额和数目 jie_nowSum_month :=0; dai_nowSum_month :=0; jie_nowNumSum_month :=0; dai_nowNumSum_month :=0; ----循环 for em in (select * from TBL_ASSET_SIGN t where (to_char(t.buy_day,'yyyy/mm/dd') between dateTimes.Firstday and dateTimes.Lastday) and t.value_4='1' and t.IS_DELETED='0' and t.USE_DEPT is not null ) loop --如果类型是购入时(单个数据) if em.move_method = moth1 then ASSET_CODE := em.ASSET_CODE; MODEL1 := em.MODEL; buy_date := em.buy_day; jie_ASSET_NUM:=em.asset_num; jie_PRICE := em.price; jie_JINE := jie_ASSET_NUM * jie_PRICE; dai_ASSET_NUM := 0; dai_PRICE := 0; dai_JINE := dai_ASSET_NUM * dai_PRICE; --如果类型是调入时(单个数据) ELSIF em.move_method = moth3 then ASSET_CODE := em.ASSET_CODE; MODEL1 := em.MODEL; buy_date := em.buy_day; jie_ASSET_NUM:=em.asset_num; jie_PRICE := em.price; jie_JINE := jie_ASSET_NUM * jie_PRICE; dai_ASSET_NUM := 0; dai_PRICE := 0; dai_JINE := dai_ASSET_NUM * dai_PRICE; else buy_date := em.BUY_DAY; ASSET_CODE := em.ASSET_CODE; MODEL1 := em.MODEL; jie_ASSET_NUM:=0; jie_PRICE :=0; jie_JINE := jie_ASSET_NUM * jie_PRICE; dai_ASSET_NUM := em.asset_num; dai_PRICE := em.price; dai_JINE := dai_ASSET_NUM * dai_PRICE; end if; dai_nowSum_month :=dai_nowSum_month +dai_JINE; --将每次计算的金额相加的出每月金额总和(贷方) dai_nowNumSum_month := dai_nowNumSum_month + dai_ASSET_NUM; --将每次计算的数目相加的出每月数目总和(贷方) jie_nowSum_month :=jie_nowSum_month+jie_JINE; --将每次计算的金额相加的出每月金额总和(借方) jie_nowNumSum_month := jie_nowNumSum_month + jie_ASSET_NUM; --将每次计算的数目相加的出每月数目总和(借方) SUMPRICE := SUMPRICE_LAST_YEAR + jie_JINE - dai_JINE; --计算当笔数据的总金额 DBMS_OUTPUT.put_line(jie_ASSET_NUM||'----天----'||jie_PRICE||'----天----'||jie_JINE||'----天---'||dai_ASSET_NUM||'----天----'||dai_PRICE||'----天----'||dai_JINE_MONTH||'----天----'||SUMPRICE); end loop; ---一个月循环完成后计算本年信息 dai_JINE_MONTH :=dai_nowSum_month; --将每次计算的金额相加的出每月金额总和(贷方) dai_ASSET_NUM_MONTH := dai_nowNumSum_month; --将每次计算的数目相加的出每月数目总和(贷方) jie_JINE_MONTH :=jie_nowSum_month; --将每次计算的金额相加的出每月金额总和(借方) jie_ASSET_NUM_MONTH := jie_nowNumSum_month; --将每次计算的数目相加的出每月数目总和(借方) jie_nowSum := jie_nowSum + jie_JINE_MONTH; --将每个月金额相加,便可对12个月进行信息的累加(借方) dai_nowSum := dai_nowSum + dai_JINE_MONTH ; --将每个月金额相加,便可对12个月进行信息的累加(贷方) jie_nowNumSum :=jie_nowNumSum + jie_ASSET_NUM_MONTH; --将每个月数目相加,便可对12个月进行信息的累加(借方) dai_nowNumSum :=dai_nowNumSum + dai_ASSET_NUM_MONTH; --将每个月数目相加,便可对12个月进行信息的累加(袋方) jie_PRICE_MONTH :=0; dai_PRICE_MONTH :=0; SUMPRICE_MONTH := SUMPRICE_LAST_YEAR + jie_JINE_MONTH - dai_JINE_MONTH; --计算每月的总金额 DBMS_OUTPUT.put_line(jie_ASSET_NUM_MONTH||'----月----'||jie_PRICE_MONTH||'----月----'||jie_JINE_MONTH||'----月----'||dai_ASSET_NUM_MONTH||'----月----'||dai_PRICE_MONTH||'----月----'||dai_JINE_MONTH||'----月----'||SUMPRICE_MONTH); jie_ASSET_NUM_YEAR := jie_nowNumSum; jie_PRICE_YEAR :=0; jie_JINE_YEAR := jie_nowSum; dai_PRICE_YEAR :=0; dai_ASSET_NUM_YEAR := dai_nowNumSum; dai_JINE_YEAR := dai_nowSum; SUMPRICE_YEAR := SUMPRICE_LAST_YEAR + jie_JINE_YEAR - dai_JINE_YEAR; end loop; end; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-12-15
怎么没有回复的?
|
|
返回顶楼 | |