救教!~ 存储过程

teng2048 2008-05-06 08:53:22
create procedure p_dpttjqkcx
(
v_hslb varchar(2), --资金类别(01-售房款,02-维修基金)
v_gjdbm varchar(2), --归集点
v_lsgxbm varchar(4), --承办网点
v_dwbm varchar(20),--单位账号
v_rq1 date, --开始日期
v_rq2 date, --结束日期
v_cxlx smallint --0不包含未到账 1包含未到账
)
--加密
result sets 1
language sql
set option commit=*cs

begin
declare v_a075 varchar(3);
declare v_a073 varchar(5);
declare v_a003 varchar(20);
declare v_else decimal(14,2) default 0;
declare v_b016 int;
declare v_cnt smallint default 0;
declare sqlcode integer default 0;

declare global temporary table tmp_dpttjqkcx
(
a003 varchar(20) default ' ',
a004 varchar(80) default ' ',
b001 decimal(14,2) default 0 not null,
b002 int default 0 not null,
b003 decimal(12,2) default 0 not null,
b004 decimal(12,2) default 0 not null,
b005 int default 0 not null,
b006 decimal(12,2) default 0 not null,
b007 int default 0 not null,
b008 decimal(12,2) default 0 not null,
b009 int default 0 not null,
b010 decimal(12,2) default 0 not null,
b011 int default 0 not null,
b012 decimal(12,2) default 0 not null,
b013 decimal(12,2) default 0 not null,
b014 decimal(10,2) default 0 not null,
b015 decimal(14,2) default 0 not null,
b016 int default 0 not null,
b017 int default 0 not null
)
on commit preserve rows with replace;

declare global temporary table tmp_dpttjqkcx1
(
a003 varchar(20) default ' ',
a004 varchar(80) default ' ',
b016 int default 0 not null
)
on commit delete rows with replace;

declare global temporary table tmp_dpttjqkcx2
(
a003 varchar(20) default ' ',
a004 varchar(80) default ' ',
b017 int default 0 not null
)
on commit delete rows with replace;


if v_gjdbm='00' then
set v_a075='%';
else
set v_a075=v_gjdbm;
end if;
if ifnull(trim(v_lsgxbm),'')='' then
set v_a073='%';
else
set v_a073=trim(v_lsgxbm);
end if;
if ifnull(trim(v_dwbm),'')='' then
set v_a003='%';
else
set v_a003=trim(v_dwbm);
end if;

if v_cxlx = 0 then
insert into session.tmp_dpttjqkcx (a003,a004,b001,b002,b003,b004,b005,b006,b007,b008,b009,b010,b011,b012,b013,b014,b015)
select a003,max(a004) a004,
sum(case when p012 between '01' and '13' and p002 <v_rq1 then p008-p009 else v_else end) as b001,
sum(case when p012 in('07','08') and p002 between v_rq1 and v_rq2 then p011 else v_else end) as b002,
sum(case when p012 in('07','08') and p002 between v_rq1 and v_rq2 then p008 else v_else end) as b003,
sum(case when p012 in('01','02') and p002 between v_rq1 and v_rq2 then p008 else v_else end) as b004,
sum(case when p012 in('05','11') and p002 between v_rq1 and v_rq2 then p011 else v_else end) as b005,
sum(case when p012 in('05','11') and p002 between v_rq1 and v_rq2 then p008 else v_else end) as b006,
sum(case when p012 in('06','12') and p002 between v_rq1 and v_rq2 then p011 else v_else end) as b007,
sum(case when p012 in('06','12') and p002 between v_rq1 and v_rq2 then p009 else v_else end) as b008,
sum(case when p012 in('03','13') and p002 between v_rq1 and v_rq2 then p011 else v_else end) as b009,
sum(case when p012 in('03','13') and p002 between v_rq1 and v_rq2 then p009 else v_else end) as b010,
sum(case when p012='04' and p002 between v_rq1 and v_rq2 then p011 else v_else end) as b011,
sum(case when p012='04' and p002 between v_rq1 and v_rq2 then p009 else v_else end) as b012,
sum(case when p012 in('04','12') and p002 between v_rq1 and v_rq2 then p014 else v_else end) as b013,
sum(case when p012='09' and p002 between v_rq1 and v_rq2 then p008 else v_else end) as b014,
sum(case when p012 between '01' and '13' and p002<=v_rq2 then p008-p009 else v_else end) as b015
from gzpzk
where a075 like v_a075 and a003 like v_a003 and p012 between '01' and '13' and p002<=v_rq2 and p000 = v_hslb
and exists(select bm from bm_a003 where bm=gzpzk.a003 and gjdbm like v_a075 and lsgxbm like v_a073 and bm like v_a003)
group by a003;
else
insert into session.tmp_dpttjqkcx (a003,a004,b001,b002,b003,b004,b005,b006,b007,b008,b009,b010,b011,b012,b013,b014,b015)
select a003,max(a004) a004,
sum(case when p012 between '01' and '13' and p006 <v_rq1 then p008-p009 else v_else end) as b001,
sum(case when p012 in('02','07','08') and p006 between v_rq1 and v_rq2 then p011 else v_else end) as b002,
sum(case when p012 in('02','07','08') and p006 between v_rq1 and v_rq2 then p008 else v_else end) as b003,
sum(case when p012 in('01','02') and p006 between v_rq1 and v_rq2 then p008 else v_else end) as b004,
sum(case when p012 in('05','11') and p006 between v_rq1 and v_rq2 then p011 else v_else end) as b005,
sum(case when p012 in('05','11') and p006 between v_rq1 and v_rq2 then p008 else v_else end) as b006,
sum(case when p012 in('06','12') and p006 between v_rq1 and v_rq2 then p011 else v_else end) as b007,
sum(case when p012 in('06','12') and p006 between v_rq1 and v_rq2 then p009 else v_else end) as b008,
sum(case when p012 in('03','13') and p002 between v_rq1 and v_rq2 then p011 else v_else end) as b009,
sum(case when p012 in('03','13') and p002 between v_rq1 and v_rq2 then p009 else v_else end) as b010,
sum(case when p012='04' and p006 between v_rq1 and v_rq2 then p011 else v_else end) as b011,
sum(case when p012='04' and p006 between v_rq1 and v_rq2 then p009 else v_else end) as b012,
sum(case when p012 in('04','12') and p006 between v_rq1 and v_rq2 then p014 else v_else end) as b013,
sum(case when p012='09' and p006 between v_rq1 and v_rq2 then p008 else v_else end) as b014,
sum(case when p012 between '01' and '13' and p006<=v_rq2 then p008-p009 else v_else end) as b015
from gzpzk
where a075 like v_a075 and a003 like v_a003 and p012 between '01' and '13' and p006<=v_rq2 and p000 = v_hslb
and exists(select bm from bm_a003 where bm=gzpzk.a003 and gjdbm like v_a075 and lsgxbm like v_a073 and bm like v_a003)
group by a003;
end if;
commit;
begin
declare sel_cur cursor with return to caller for select * from session.tmp_dpttjqkcx ;
open sel_cur;
end;
return;
end;

这是我公司给的东西我想看懂它需要看哪些资料最好有教程的地址
...全文
78 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoxyj 2008-05-07
  • 打赏
  • 举报
回复
分析就是了
teng2048 2008-05-07
  • 打赏
  • 举报
回复
我主要就是想看懂里面的语句,工头告诉我看数据库 我根本就不知道要看哪方面的
xudaqing2008 2008-05-06
  • 打赏
  • 举报
回复
建議學習一下<<oracle 9i初學者指南>>
Jane_64 2008-05-06
  • 打赏
  • 举报
回复
首先知道语句意思----- 这个要是不知道可以查相关资料
其次是用到的表字段意思 ----- 这个要是不知道,只有问相关人员或通过里面的数据和存储过程猜了
申明的变量意思 ----- 看你的存储过程也没有注释,就只有根据上下文猜了
teng2048 2008-05-06
  • 打赏
  • 举报
回复
sql引论
是什么?
niujunkai 2008-05-06
  • 打赏
  • 举报
回复
看看sql引论就差不多了应该

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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