建立jobs后,今天发现表已经被锁住.
没有发现哪块的循环不能跳出,望高手帮忙!
create or replace procedure user_type1
as
--可以从目标表中获取的变量
--REP_MONTH_AFTER_CUSTOMERVALUE后付费表项
V_After_Billfee  REP_MONTH_AFTER_CUSTOMERVALUE.BILLFEE%type; --总话费
V_After_Yz_Fee  REP_MONTH_AFTER_CUSTOMERVALUE.YZ_FEE%type;  --基本月租费
V_After_Yy_Fee  REP_MONTH_AFTER_CUSTOMERVALUE.YY_FEE%type;  --语音通话费用
V_After_Zz_Fee  REP_MONTH_AFTER_CUSTOMERVALUE.ZZ_FEE%type;  --增值业务费用
V_After_Calltimes  REP_MONTH_AFTER_CUSTOMERVALUE.CALLTIMES%type;  --总语音通话次数
V_After_Smstimes  REP_MONTH_AFTER_CUSTOMERVALUE.Smstimes%type;  --总短信条数
V_After_On_Date  REP_MONTH_AFTER_CUSTOMERVALUE.ON_DATE%type;  --在网时长
V_After_Callnum  REP_MONTH_AFTER_CUSTOMERVALUE.CallNum%type;  --客户不同的主被叫号码个数
V_After_Ssum  REP_MONTH_AFTER_CUSTOMERVALUE.SSUM%type;  --订购增值业务个数
V_After_Stoptimes  REP_MONTH_AFTER_CUSTOMERVALUE.StopTimes%type;  --欠费次数
V_After_SUBSCRBID   REP_MONTH_AFTER_CUSTOMERVALUE.SUBSCRBID%type;  --欠费次数V_After_Type char(1);
V_Before_Type char(1);--用户类型(0预付费,1后付费)
v_value_type varchar(10);--需要计算或定义的变量CV_SUM float := 0.0;--系统异常对象
SYS_DEBUG_EXC EXCEPTION;
v_ErrorCode NUMBER; -- 出错的代码
v_ErrorMsg VARCHAR2(200); -- 错误的消息显示
v_CurrentUser VARCHAR2(8); -- 当前数据库用户
v_Information VARCHAR2(100); -- 关于错误的信息type t_target_Data IS REF CURSOR; --目标数据类型
v_AFTERCursorVar t_target_Data; --定义类型游标1
--v_BEFORECursorVar t_target_Data; --定义类型游标2
begin
--打开游标
   OPEN v_AFTERCursorVar  FOR
 SELECT
         BILLFEE,
         YZ_FEE,
         YY_FEE,
         ZZ_FEE,
         CALLTIMES,
         SMSTIMES,
         ON_DATE,
         CALLNUM,
         SSUM,
         STOPTIMES,
         USER_TYPE,
         SUBSCRBID     from REP_MONTH_AFTER_CUSTOMERVALUE
  WHERE BILLFEE > 0 and (USERSTATE=000 or USERSTATE=001);
  --遍历
  loop
  --后付费部分
  FETCH   v_AFTERCursorVar
    into  V_After_Billfee,
  V_After_Yz_Fee,
  V_After_Yy_Fee,
  V_After_Zz_Fee,
  V_After_Calltimes,
  V_After_Smstimes,
  V_After_On_Date,
  V_After_Callnum,
  V_After_Ssum,
  V_After_Stoptimes,
  V_After_Type,
            V_After_SUBSCRBID;
  --退出条件
         EXIT WHEN v_AFTERCursorVar %NOTFOUND;
        CV_SUM := CV_SUM + data_Treatment(V_After_Billfee,V_After_Type,'BILLFEE'); --总话费添入
         CV_SUM := CV_SUM + data_Treatment(V_After_Yz_Fee,V_After_Type,'YZ_FEE'); --基本月租费
         CV_SUM := CV_SUM + data_Treatment(V_After_Yy_Fee,V_After_Type,'YY_FEE'); --语音通话费用
         CV_SUM := CV_SUM + data_Treatment(V_After_Zz_Fee,V_After_Type,'ZZ_FEE'); --增值业务费用
         CV_SUM := CV_SUM + data_Treatment(V_After_Calltimes,V_After_Type,'CALLTIMES'); --增值业务个数
         CV_SUM := CV_SUM + data_Treatment(V_After_Smstimes,V_After_Type,'SMSTIMES');--在网时长
         CV_SUM := CV_SUM + data_Treatment(V_After_On_Date,V_After_Type,'ON_DATE');--短信话单条数
         CV_SUM := CV_SUM + data_Treatment(V_After_Callnum,V_After_Type,'CALLNUM');--不同主被叫号码个数
         CV_SUM := CV_SUM + data_Treatment(V_After_Ssum,V_After_Type,'SSUM');--被欠费停机次数
         CV_SUM := CV_SUM + data_Treatment(V_After_Stoptimes,V_After_Type,'STOPTIMES');--通话次数
           -- 价值分类
                if 80 < CV_SUM and  CV_SUM < 100 or CV_SUM = 100 then
                    v_value_type := 'A';
                elsif 60 < CV_SUM and CV_SUM < 80 or CV_SUM = 80 then
                   v_value_type := 'B';
                elsif 40 < CV_SUM and CV_SUM < 60 or CV_SUM = 60 then
                   v_value_type := 'C';
                elsif 20 < CV_SUM and CV_SUM< 40 or CV_SUM = 40 then
                   v_value_type := 'D';
                else
                   v_value_type := 'E';
                end if;
          update REP_MONTH_AFTER_CUSTOMERVALUE set SCORE = CV_SUM,value_type = v_value_type
         where SUBSCRBID = V_After_SUBSCRBID;
     END LOOP;
           --关闭游标
     dbms_output.put_line(sqlcode);
     CLOSE v_AFTERCursorVar ;
     --CLOSE v_BEFORECursorVar ;
      --提交事务
     commit;
     --异常处理
               --自定义异常
           exception
             when SYS_DEBUG_EXC then
                   --关闭游标
                   CLOSE v_AFTERCursorVar ;
                   --CLOSE v_BEFORECursorVar ;
                   dbms_output.put_line('异常调试,自动回滚');
                   --回滚事务
                   rollback;
               --其他异常
               when others then
                    --关闭游标
                   CLOSE v_AFTERCursorVar ;
                   v_ErrorCode := SQLCODE;
                   v_ErrorMsg := SQLERRM;
                   v_CurrentUser := USER;
                   v_Information := '遇到了错误 ' || TO_CHAR(SYSDATE) || ' 数据库用户 ' || v_CurrentUser;
                   dbms_output.put_line('执行错误,自动回滚');
                   dbms_output.put_line('详细信息:'||'错误代码:'||v_ErrorCode||',错误消息:'||v_ErrorMsg||',日志信息:'||v_Information);
                   --回滚事务
                  Rollback;end user_type1;