最经小头儿给了我一个活,要我根据一些参数算保费。
根据用户的参数不同算法也不同,我基本上都实现了。
现在我想的问题是异常处理部分,首先我们共同的意识是
业务逻辑的判断不应该我们来做,但是他提出了一些问题,
表示了一些担忧(此人技术感觉不是很强),认为还是在function里面
进行一些异常判断,比如我代码中有累加的情况,他说如果你求出的
情况有null的,那么累加时会怎么样?等等一些。我试了试,总结一句话,
oracle不像java那样有异常处理,好像只要一出异常就立即返回null。
一 我的结论对不对?
二 我该怎么对他说?
8 个解决方案
#1
--oracle有异常处理,很强大,不比java弱~~~
create or replace function...
...
begin
exception
when others then
--写你想要做的事
end;
#2
楼上能不能多几个when,我不是很懂。针对具体语法给个例子,exception
#3
如果有NULL值,而你在程序中不判断的话,你的函数不能正常执行,直接就抛异常,跟java没什么区别吧。PLSQL有异常处理,你可以像楼上那样处理异常。
#4
你的程序应该是没报异常吧,以为你做累加的时候如果有空值,结果就是空值了,算术运算的时候如果有NULL则结果就是空了,可以再程序中加入NVL(累加字段,0),表示如果累加的值是空的,则当做0处理。如果oracle中真有异常的话,和JAVA是一样的现象
#5
一般情况下都是根据输入参数去界定异常
#6
谢谢各位,本人第一次写function,请多多指教
#7
EXCEPTION
when others then
dbms_output.put_line('计算出现错误');
return -1;
大哥们我简单处理了,只要出错,返回-1,只要对方知道这是错误也就算完成了。
问题是那句打印不知道输出到哪里了。dbms_output.put_line('计算出现错误');
#8
--这个打印,你运行时是没保存的,你要不写进文本,要不写到表里
--在plsql中调试运行,可以从窗口中看到打印的信息
...
exception
when others then
insert into table(a) values (sqlcode || sqlerrm); --这是写进表里
或者:
utl_file包写文件
end;
#1
--oracle有异常处理,很强大,不比java弱~~~
create or replace function...
...
begin
exception
when others then
--写你想要做的事
end;
#2
楼上能不能多几个when,我不是很懂。针对具体语法给个例子,exception
#3
如果有NULL值,而你在程序中不判断的话,你的函数不能正常执行,直接就抛异常,跟java没什么区别吧。PLSQL有异常处理,你可以像楼上那样处理异常。
#4
你的程序应该是没报异常吧,以为你做累加的时候如果有空值,结果就是空值了,算术运算的时候如果有NULL则结果就是空了,可以再程序中加入NVL(累加字段,0),表示如果累加的值是空的,则当做0处理。如果oracle中真有异常的话,和JAVA是一样的现象
#5
一般情况下都是根据输入参数去界定异常
#6
谢谢各位,本人第一次写function,请多多指教
#7
EXCEPTION
when others then
dbms_output.put_line('计算出现错误');
return -1;
大哥们我简单处理了,只要出错,返回-1,只要对方知道这是错误也就算完成了。
问题是那句打印不知道输出到哪里了。dbms_output.put_line('计算出现错误');
#8
--这个打印,你运行时是没保存的,你要不写进文本,要不写到表里
--在plsql中调试运行,可以从窗口中看到打印的信息
...
exception
when others then
insert into table(a) values (sqlcode || sqlerrm); --这是写进表里
或者:
utl_file包写文件
end;