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,完成操作.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值