日期:2014-05-16  浏览次数:20449 次

oracle中存储过程procedure的异常处理
create or replace procedure PROC_TO_T_PARAMETER is

  l_airBestCity varchar2(50);
  l_currentDay  date;
  l_air30daysI  varchar2(100);
  l_errorcode   varchar2(100);
  
begin
  -- author sunchengliang
  --当天时间
  select max(tt.oper_date) into l_currentDay from city_day tt;

  --当天空气质量最好的城市 
  select t.city
    into l_airBestCity
    from city_day t
   where t.oper_date = l_currentDay
     and t.pollution_indeces =
         (select min(ttt.pollution_indeces)
            from city_day ttt
           where ttt.oper_date = l_currentDay);

  --30内一级天数最多的城市  
     select tt.city
    into l_air30daysI
    from (select t.city, sum(decode(grade, ''Ⅰ'', 1, 0)) total1
            from city_day t
           where t.oper_date > l_currentDay - 30
             and t.oper_date  < l_currentDay
           group by t.city
order by total1 desc) tt
   where tt.total1 = (select max(sum(decode(grade, ''Ⅰ'', 1, 0))) total1
                        from city_day t
                       where t.oper_date > l_currentDay - 30
                         and t.oper_date  < l_currentDay
                       group by t.city) and rownum=1;
  --更新到db 
  update T_PARAMETER t
     set t.p_content = ''今天空气量最好的城市是:''  | | l_airBestCity  | | ''#''  | |
                       ''最近30天内空气质量一级天数最多的城市:'' | |l_air30daysI
   where t.p_type = ''1'';
  Commit;
exception
  When Others Then
    l_errorcode := sqlerrm;
    Rollback;
  
end PROC_TO_T_PARAMETER;

请注意格式



create or replace procedure PROC_TO_T_PARAMETER is
--your temporary variables


begin
--your sql here
  ...
  commit;
excption
     When Others Then
     l_errorcode := sqlerrm;
     Rollback;
end;

当sql语句出现异常时,就会跳到exception代码段,sqlerrm会显示出错误信息.也可以把它赋给out参数,返回给用户。并回滚。如果sql没有异常,commit,完成操作.



我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html