数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle使用游标触发器的存储过程


发布日期:2018年11月25日
 
oracle使用游标触发器的存储过程

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;

上一篇:访问多个SQL Server数据库

下一篇:基于已被证实的Oracle高可用性技术MAA