create or replace procedure Pro_rateCalculate as
declare
v_sc_id dim_service_centersc_id%TYPE; 声明一个临时变量用来存储维修中心id
v_count number; 存储三个月内不合格的数量
v_allcount number; 存取三个月内不合格的数量
v_count number; 存取时间差若改值大于表示是六个月之前的维修中心
v_allcount number;
v_datediff number;
v_rate number;
cursor cur_sc_id is
select sc_id from dim_service_center; 声明一个游标此游标查出的是维修中心id
begin
open cur_sc_id;
LOOP
FETCH cur_sc_id
INTO v_sc_id; 读取一个游标数据到v_sc_id
EXIT WHEN cur_sc_id%NOTFOUND; 如果读到最后则退出
select count(*) 计算主表中连续三个月不合格的数据的条数
into v_count
from dim_service_center
inner join fact_repair_sheet on dim_service_centersc_id =
fact_repair_sheetsc_id
inner join fact_vefpart on fact_vefpartrepid =
fact_repair_sheetrepair_sheet_id
where ((fact_vefpartvef_result = 初核结果为不合格
and fact_vefpartMAJOR_FLAG = ) 且不需要进行复核
or (fact_vefpartvef_result = )) 或者复核结果为不合格
and fact_vefpartismajor = 且是主要备件
and fact_repair_sheetclose_date > Add_months(sysdate )为三个月内的数据
and dim_service_centersc_id = v_sc_id;
v_allcount := v_count; 把不合格的备件数据的数量赋值给总数量计数器
select count(*) 计算电话回访中连续三个月不合格的数据条数
into v_count
from fact_verify
inner join fact_repair_sheet on fact_verifyrepid =
fact_repair_sheetrepair_sheet_id
inner join dim_service_center on dim_service_centersc_id =
fact_repair_sheetsc_id
where fact_verify
CALLSTATUS = 不合格 回访不合格
and fact_repair_sheetclose_date > Add_months(sysdate )三个月内
and dim_service_centersc_id = v_sc_id;
v_allcount := v_allcount + v_count; 计算连续三个月总的不合格数量
select count(*) 计算主表中连续六个月不合格的数据的条数
into v_count
from dim_service_center
inner join fact_repair_sheet on dim_service_centersc_id =
fact_repair_sheetsc_id
inner join fact_vefpart on fact_vefpartrepid =
fact_repair_sheetrepair_sheet_id
where ((fact_vefpartvef_result = 初核结果为不合格
and fact_vefpartMAJOR_FLAG = ) 且不需要进行复核
or (fact_vefpartvef_result = )) 或者复核结果为不合格
and fact_vefpartismajor = 且是主要备件
and fact_repair_sheetclose_date > Add_months(sysdate )六个月内
and dim_service_centersc_id = v_sc_id;
v_allcount := v_count; 把不合格的备件数据的数量赋值给总数量计数器
select count(*) 计算电话回访中连续六个月不合格的数据条数
into v_count
from fact_verify
inner join fact_repair_sheet on fact_verifyrepid =
fact_repair_sheetrepair_sheet_id
inner join dim_service_center on dim_service_centersc_id =
fact_repair_sheetsc_id
where fact_verify
CALLSTATUS = 不合格 回访不合格
and fact_repair_sheetclose_date > Add_months(sysdate )
and dim_service_centersc_id = v_sc_id;
v_allcount := v_allcount + v_count; 计算连续六个月总的不合格数量
select Add_months(sysdate ) creation_date
into v_datediff
from dim_service_center
where sc_id = v_sc_id;
if v_allcount > then
v_rate := ;
elsif v_allcount > then
v_rate := ;
elsif v_allcount = then
v_rate := ;
end if;
if (v_allcount = ) then
v_rate := ;
end if;
if (v_datediff < ) then
v_rate := ;
end if;
insert into VEF_FUHERATE
(vef_fuherate_id
scid
auto_rate
change_rate
status
modify_status
createdate
updatedate)
values
(sys_guid() v_sc_id v_rate v_rate sysdate sysdate);
end loop;
close cur_sc_id;
end;