Oracle PL/Sql函数
我的任务是创建一个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
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。谢谢你的更正。和平=