oracle存储过程

linpyi 2014-03-11 02:19:37
写一存储过程做统计,涉及几张表,基础信息表,存放需要统计的地区信息,例如北京、天津、上海

需要处理的逻辑是,循环基础信息表,按照对应的地区名称统计tablea里的这个月,上个月、去年这月的数据。

出现的问题是基础信息表只有一家公司数据正确,多家公司统计出来的ASUM变成了集合。每个地区的数据都一样。

cursor bt is
select distinct (companycnname) from BASETOTAL;
begin
v_Date := to_DATE(strDate, 'yyyy-mm');
v_lastMonthDate := add_months(v_Date, -1);
v_lastYearDate := add_months(v_Date, -12);
strDat := to_char(v_Date, 'yyyy-mm');
strLastMonthDate := to_char(v_lastMonthDate, 'yyyy-mm');
strLastYearDate := to_char(v_lastYearDate, 'yyyy-mm');

open bt;

LOOP
fetch bt
into COMPANYCNNAME;
exit when bt%notfound;

dbms_output.PUT_LINE('COMPANYCNNAME=' || COMPANYCNNAME)
while i <= 2 loop
If (i = 0) then
v_CREATETIME := strDat;
dbms_output.PUT_LINE(v_CREATETIME);
else
if (i = 1) then
v_CREATETIME := strLastMonthDate;
dbms_output.PUT_LINE(v_CREATETIME);
else
if (i = 2) then
v_CREATETIME := strLastYearDate;
dbms_output.PUT_LINE(v_CREATETIME);
end if;
end if;
end If;
select COUNT(*)
into ASUM form table1 WHERE to_char(t.CREATETIME, 'yyyy-mm') >= v_CREATETIME
AND T.ENABLE = 'T' AND SUBSTR(T.no, 2, 2) in
(select b.extno
from BASETOTAL b
where b.companycnname = COMPANYCNNAME);
dbms_output.PUT_LINE('ASUM =' || ASUM );
i := i + 1;
END loop;

commit;
end LOOP;

...全文
125 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
流浪川 2014-03-11
  • 打赏
  • 举报
回复
引用 4 楼 linpyi 的回复:
COMPANYCNNAME=天津 2014-03 COMPANYCNNAME=天津 ASUM =6 COMPANYCNNAME=北京 2014-03 COMPANYCNNAME=北京 ASUM=6 COMPANYCNNAME=厦门 2014-03 COMPANYCNNAME=厦门 ASUM=6 实际上北京和天津应该都是0
基本可以确定就是因为你对变量命名的不规范引起的这个问题。。
流浪川 2014-03-11
  • 打赏
  • 举报
回复
建议你不要把变量名命名为与字段相同的名字。。 改一下试试。。可能让你的in里面的子查询变成了1=1的效果。。
linpyi 2014-03-11
  • 打赏
  • 举报
回复
COMPANYCNNAME=天津 2014-03 COMPANYCNNAME=天津 ASUM =6 COMPANYCNNAME=北京 2014-03 COMPANYCNNAME=北京 ASUM=6 COMPANYCNNAME=厦门 2014-03 COMPANYCNNAME=厦门 ASUM=6 实际上北京和天津应该都是0
linpyi 2014-03-11
  • 打赏
  • 举报
回复
i := 0; 这个是有的,没问题,问题是ASUM 的值总是不对,单个地区数据正常,多个地区,地区名称是对的,数据变成总和了。
流浪川 2014-03-11
  • 打赏
  • 举报
回复
就是在while i <= 2 loop之前 增加 i:=0;
流浪川 2014-03-11
  • 打赏
  • 举报
回复
into COMPANYCNNAME; exit when bt%notfound; 之后需要将i重新初始化为0

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧