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