create or replace procedure Pro_rateCalculate as
--declare
v_sc_id
dim_service_center。sc_id%TYPE; --声明一个临时变量,用来存储维修中心id
v_count3
number; --存储三个月内不合格的数量
v_allcount3 number; --存取三个月内不合格的数量
v_count6
number; --存取时间差,若改值大于0表示是六个月之前的维修中心
v_allcount6 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_count3
from dim_service_center
inner join fact_repair_sheet on dim_service_center。
sc_id =
fact_repair_sheet。sc_id
inner join fact_vefpart on fact_vefpart。repid =
fact_repair_sheet。repair_sheet_id
where ((fact_vefpart。
vef_result1 = '2' --初核结果为不合格
and fact_vefpart。MAJOR_FLAG = '2') --且不需要进行复核
or (fact_vefpart。vef_result2 = '2')) --或者复核结果为不合格
and fact_vefpart。
ismajor = '1' --且是主要备件
and fact_repair_sheet。close_date > Add_months(sysdate, -3)--为三个月内的数据
and dim_service_center。sc_id = v_sc_id;。
全部