Oracle使用游标触发器的实际存储过程


  本文标签:Oracle使用游标触发器

  以下的文章抓哟讲述的是Oracle使用游标触发器的实际存储过程,文章主要是通过实际应用代码的方式来引出相关实际应用的具体操作方案,以下就是文章的具体内容的描述,望你在浏览之后会有所收获  。

  1. create or replace procedure Pro_rateCalculate as  
  2. --declare  
  3. v_sc_id dim_service_center.sc_id%TYPE;  

  声明一个临时变量,用来存储维修中心id

  1. v_count3 number; 

  存储三个月内不合格的数量

  1. v_allcount3 number;  

  存取三个月内不合格的数量

  1. v_count6 number;  

  存取时间差,若改值大于0表示是六个月之前的维修中心

  

  1. v_allcount6 number;  
  2. v_datediff number;  
  3. v_rate number;  
  4. cursor cur_sc_id is  
  5. select sc_id from dim_service_center;  

  声明一个游标,此游标查出的是维修中心id

  

  1. begin  
  2. open cur_sc_id;  
  3. LOOP  
  4. FETCH cur_sc_id  
  5. INTO v_sc_id;  

  读取一个游标数据到v_sc_id

  1. EXIT WHEN cur_sc_id%NOTFOUND;  

  如果读到最后则退出

  select count(*)计算主表中连续三个月不合格的数据的条数

  

  1. into v_count3  
  2. from dim_service_center  
  3. inner join fact_repair_sheet on dim_service_center.sc_id =  
  4. fact_repair_sheet.sc_id  
  5. inner join fact_vefpart on fact_vefpart.repid =  
  6. fact_repair_sheet.repair_sheet_id  
  7. where ((fact_vefpart.vef_result1 = 2 

  初核结果为不合格

  1. and fact_vefpart.MAJOR_FLAG = 2

  且不需要进行复核

  1. or (fact_vefpart.vef_result2 = 2)) 

  或者复核结果为不合格

  1. and fact_vefpart.ismajor = 1  

  且是主要备件

  

  1. and fact_repair_sheet.close_date > Add_months(sysdate, -3) 

  为三个月内的数据q

  

  1. and dim_service_center.sc_id = v_sc_id

  把不合格的备件数据的数量赋值给总数量计数器

  select count(*)计算电话回访中连续三个月不合格的数据条数

  

  1. into v_count3  
  2. from fact_verify  
  3. inner join fact_repair_sheet on fact_verify.repid =  
  4. fact_repair_sheet.repair_sheet_id  
  5. inner join dim_service_center on dim_service_center.sc_id =  
  6. fact_repair_sheet.sc_id  
  7. where fact_verify.  

  

  CALLSTATUS = 不合格回访不合格

  

  1. and fact_repair_sheet.close_date > Add_months(sysdate, -3) 

  三个月内

  

  1. v_allcount3 :v_allcount3 + v_count3; 

  计算连续三个月总的不合格数量

  上述的相关内容就是对Oracle使用游标触发器的存储过程的描述,希望会给你带来一些帮助在此方面  。