存储过程查询结果打印很慢,不知为何,代码如下:
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;
分享到:
相关推荐
数据结构是计算机科学中的核心概念,它涉及到如何有效地组织和管理数据,以便于高效地进行存储、检索和处理。本书“数据结构原理与经典问题求解”深入探讨了这一主题,通过源代码的方式帮助读者更好地理解和实践。源...
13. 动态规划:动态规划是一种解决问题的方法,通过将大问题分解为小问题,存储中间结果以避免重复计算。 14. 分治算法:分治策略将大问题分解为若干小问题求解,再合并结果,如快速排序和归并排序。 15. 贪心算法...
遍历方法可以用来复制、查找和打印树的节点,其中,前序遍历常用于构造二叉树,中序遍历在二叉搜索树中用于排序,后序遍历在求解某些问题时也很有用。 线索二叉树是一种特殊形式的二叉树,通过在二叉链表中添加线索...
在“数据结构演示图.rar”这个压缩包中,我们很可能会找到一系列图表,用于直观地展示各种数据结构的工作原理和操作过程。这些图形化表示对于理解和学习数据结构极其有帮助。 数据结构主要包括数组、链表、栈、队列...
10. **动态规划和贪心策略**:在解决实际问题时,这些方法常与数据结构结合,优化问题求解过程。 这份“数据结构作业辅导3.pptx”可能涵盖了以上部分或全部知识点,并通过例题解析、实例演示等方式帮助学生深入理解...
数据结构是计算机科学中的核心课程,它研究如何有效地组织、存储和处理数据,以便于高效地执行各种操作。在“09数据结构”这个主题中,我们主要关注的是2009年广东工业大学(广工)的数据结构考试试卷。这份照片版的...
10. **动态规划**:这是一种优化问题求解方法,通过将问题分解成子问题并存储中间结果来避免重复计算,常用于最短路径、背包问题等。 这些基础知识是每个程序员必须掌握的,通过学习“数据结构PPT(1-7)”,你将能...
- 考虑到循环遍历可能会很慢,特别是在数据量很大的情况下,可以考虑使用并行计算或者分布式计算来加速计算过程。 --- #### 知识点四:日期计算(程序4) **题目背景:** 本题要求根据给定的年、月、日,计算出这...
数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据,以便进行快速查询、插入和删除等操作。本资源“数据结构1800试题及答案.rar”提供了一套丰富的练习题和解答,帮助学习者深入理解和...
数据结构是计算机科学中的核心课程之一,主要研究数据在计算机中的组织、存储和管理方式。严蔚敏编著的《数据结构》一书是该领域内的经典教材,它详细介绍了各种基本的数据结构类型,如线性表、栈、队列、树、图以及...
数组存储元素连续,访问速度快,但插入和删除操作可能涉及大量元素移动;链表则支持快速插入和删除,但访问速度相对较慢。 2. **栈与队列**:栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等...
数组提供了随机访问的优势,但插入和删除操作可能较慢。 2. **链表**:链表中的元素在内存中不是连续存储的,每个元素(节点)包含数据和指向下一个节点的引用。链表支持快速插入和删除,但访问速度不如数组。 3. ...