【发布时间】:2015-09-17 11:53:20
【问题描述】:
我的任务是创建一个具有两个参数的 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调用函数时请不要说这样做。我需要它在函数内部。
【问题讨论】:
-
在 FSUBSCRIBER_ID != UNOS_FSUB OR BCYCLE != UNOS_BCYCLE; 的情况下需要返回零而且我不知道如何将其合并到光标中。
-
您将
AMOUNTC设置为0,然后返回AMOUNTB。为什么? -
那么
if可以吗? -
是的,If 语句可以解决问题,但它必须去哪里?
-
可以在声明中默认返回变量为零:
amountb number := 0;
标签: oracle plsql plsqldeveloper