Oracle PL/Sql函数

Oracle PL/Sql函数,oracle,plsql,plsqldeveloper,Oracle,Plsql,Plsqldeveloper,我的任务是创建一个PL/SQL函数,该函数有两个参数,输入它们后,该函数必须返回匹配参数的同一行中的值之和。如果这些参数与数据库中的数据不匹配,则该函数必须返回零而不是空值 以下是我的代码: create or replace function FGET_EST_INV_SUB (unos_fsub in number, unos_bcycle in number) return number is amountb number; cursor C1 is select SUM (NVL

我的任务是创建一个PL/SQL函数,该函数有两个参数,输入它们后,该函数必须返回匹配参数的同一行中的值之和。如果这些参数与数据库中的数据不匹配,则该函数必须返回零而不是空值

以下是我的代码:

create or replace 
function FGET_EST_INV_SUB (unos_fsub in number, unos_bcycle in number)
return number 
is

amountb number;

cursor C1 is
select SUM (NVL(AMOUNT,0))
from FMDCUSTINVOICEITEMEST
where FSUBSCRIBER_ID= UNOS_FSUB and BCYCLE = UNOS_BCYCLE;

BEGIN

open C1;
FETCH C1 into AMOUNTB;

if C1%NOTFOUND then
   AMOUNTB :=0;
end if;

    close C1; 

return Amountb;

EXCEPTION 
when OTHERS then 
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

end FGET_EST_INV_SUB;

那么,在任何一个参数都不匹配的情况下,我如何使它在函数本身中返回零,并且请不要在我使用NVL调用函数时说这样做。我需要在函数内部使用它。

使用游标有点麻烦。如果您只想在接受参数时返回和,或者在参数无效时返回零,您可以将select语句放在函数内部,并使用保存和

create or replace 
function FGET_EST_INV_SUB (unos_fsub in number, unos_bcycle in number)
return number 
is

amountb number;



BEGIN

select SUM(AMOUNT) 
into amountb
from FMDCUSTINVOICEITEMEST
where FSUBSCRIBER_ID= UNOS_FSUB and BCYCLE = UNOS_BCYCLE;

return nvl(amountb,0);

EXCEPTION 
when OTHERS then 
 raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

end FGET_EST_INV_SUB;

如果FSUBSCRIBER_ID!=UNOS_FSUB或BCYCLE!=UNOS_b周期;我不知道如何将其合并到游标中。将AMOUNTC设置为0,然后返回AMOUNTB。为什么?那么if就可以了?是的,if语句可以做到这一点,但它必须去哪里?您可以在声明中将返回的变量默认为零:amountb number:=0;如果没有为求和返回行,SUM返回null。如果还返回Count*,则可以检测是否未检测到任何行。顺便说一句,我不喜欢其他人。如果参数无效,上面答案中的代码不会返回0,而是返回空值。我刚刚测试了很多次。很抱歉,我的错。如果它返回空值,那么你可以在amountb上使用nvl。谢谢你的更正。和平=