存储过程查询结果打印很慢,求解

存储过程查询结果打印很慢,不知为何,代码如下:

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;
Docplex是IBM推出的一款优化建模和求解工具,它能够帮助用户解决复杂的数学规划问题。在求解过程中,Docplex首先需要通过建模将问题描述和转换成数学形式。用户可以使用Docplex提供的API将问题表达为一组约束条件和目标函数,以及必要的变量定义。 一旦问题建模完成,Docplex就会开始求解过程。求解过程中,Docplex将根据问题的特性和规模选择合适的求解算法,并利用这些算法进行求解。具体求解过程中,Docplex会根据问题的特征和算法的要求,通过逐步调整变量的取值来逼近最优解。在求解过程中,Docplex会利用一些优化技术和策略,如线性规划、整数规划、约束编程等,以寻找最佳解或近似最佳解。 在求解过程中,Docplex会生成一系列中间结果,如目标函数值、变量取值、约束条件的满足程度等。这些中间结果可以帮助用户了解问题的求解进展和结果质量,并作为求解过程的反馈信息。除此之外,Docplex还会记录求解过程中的调整动作和策略选择,以支持用户对求解过程的跟踪和分析。 最终,当求解过程满足终止条件(如找到最优解、达到时间限制等)时,Docplex会停止求解并返回一个结果。用户可以通过Docplex提供的接口获取最优解、约束条件的满足情况、求解时间等信息。这些结果可以帮助用户评估问题的解决质量和效率,并进一步优化问题的建模和求解过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值