oracle自定义function如果异常返回值是什么?

时间:2022-01-17 20:37:16
还有就是我们有必要处理异常吗?
最经小头儿给了我一个活,要我根据一些参数算保费。
根据用户的参数不同算法也不同,我基本上都实现了。
现在我想的问题是异常处理部分,首先我们共同的意识是
业务逻辑的判断不应该我们来做,但是他提出了一些问题,
表示了一些担忧(此人技术感觉不是很强),认为还是在function里面
进行一些异常判断,比如我代码中有累加的情况,他说如果你求出的
情况有null的,那么累加时会怎么样?等等一些。我试了试,总结一句话,
oracle不像java那样有异常处理,好像只要一出异常就立即返回null。
一 我的结论对不对?
二 我该怎么对他说?

8 个解决方案

#1



--oracle有异常处理,很强大,不比java弱~~~
create or replace function...
...
begin

exception
  when others then
    --写你想要做的事
end;

#2


引用 1 楼 hanzs 的回复:
SQL code

--oracle有异常处理,很强大,不比java弱~~~
create or replace function...
...
begin

exception
  when others then
    --写你想要做的事
end;


楼上能不能多几个when,我不是很懂。针对具体语法给个例子,exception

#3


如果有NULL值,而你在程序中不判断的话,你的函数不能正常执行,直接就抛异常,跟java没什么区别吧。PLSQL有异常处理,你可以像楼上那样处理异常。

#4


引用楼主 flyfeifei66 的回复:
还有就是我们有必要处理异常吗?
最经小头儿给了我一个活,要我根据一些参数算保费。
根据用户的参数不同算法也不同,我基本上都实现了。
现在我想的问题是异常处理部分,首先我们共同的意识是
业务逻辑的判断不应该我们来做,但是他提出了一些问题,
表示了一些担忧(此人技术感觉不是很强),认为还是在function里面
进行一些异常判断,比如我代码中有累加的情况,他说如果你求出的
情况有null……

你的程序应该是没报异常吧,以为你做累加的时候如果有空值,结果就是空值了,算术运算的时候如果有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


引用 1 楼 hanzs 的回复:
SQL code

--oracle有异常处理,很强大,不比java弱~~~
create or replace function...
...
begin

exception
  when others then
    --写你想要做的事
end;


楼上能不能多几个when,我不是很懂。针对具体语法给个例子,exception

#3


如果有NULL值,而你在程序中不判断的话,你的函数不能正常执行,直接就抛异常,跟java没什么区别吧。PLSQL有异常处理,你可以像楼上那样处理异常。

#4


引用楼主 flyfeifei66 的回复:
还有就是我们有必要处理异常吗?
最经小头儿给了我一个活,要我根据一些参数算保费。
根据用户的参数不同算法也不同,我基本上都实现了。
现在我想的问题是异常处理部分,首先我们共同的意识是
业务逻辑的判断不应该我们来做,但是他提出了一些问题,
表示了一些担忧(此人技术感觉不是很强),认为还是在function里面
进行一些异常判断,比如我代码中有累加的情况,他说如果你求出的
情况有null……

你的程序应该是没报异常吧,以为你做累加的时候如果有空值,结果就是空值了,算术运算的时候如果有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;