Oracle 取消显示ORA-01403:未找到异常数据

Oracle 取消显示ORA-01403:未找到异常数据,oracle,plsql,Oracle,Plsql,我有以下代码 SELECT SUM(nvl(book_value, 0)) INTO v_balance FROM account_details WHERE currency = 'UGX'; --Write the balance away SELECT SUM(nvl(book_value, 0)) INTO v_balance FROM account_details

我有以下代码

SELECT SUM(nvl(book_value,
                   0))
    INTO v_balance
    FROM account_details
    WHERE currency = 'UGX';

--Write the balance away

SELECT SUM(nvl(book_value,
                   0))
    INTO v_balance
    FROM account_details
    WHERE currency = 'USD';

--Write the balance away
现在的问题是,表中可能没有该特定货币的数据,但可能有“美元”货币的数据。因此,基本上我希望在变量中选择sum,如果没有数据,我希望存储的proc继续,而不是抛出01403异常


我也不想将每个select into语句都放在BEGIN EXCEPTION END块中,因此是否有某种方法可以抑制异常并将v_balance变量保持在未定义(NULL)状态,而不需要异常块?

如果没有匹配项,SUM AGGRATE函数不会引发异常,它只返回null。你的代码应该已经做了你想做的事情。你的语句相当于从account_details中选择nvl(总和(账面价值),0)到v_balance,其中currency='UGX'正确且比内部选择简单得多:)你能给它添加任何解释吗,其他人可以复制你的atempt来解决问题,如果他们问这个问题是因为他们遇到了一个微笑的问题?
select nvl(balance,0) 
into v_balance
from 
(
    select sum(nvl(book_value,0)) as balance
    from account_details
    where currency = 'UGX'
);
SELECT L1.PKCODE L1CD,  L1.NAME L1N, L1.LVL L1LVL,
          L2.PKCODE L2CD, L2.NAME L2N,  L2.LVL L2LVL,
          L5.PKCODE L5CD, L5.NAME L5N,

INFOTBLM.OPBAL (  L5.PKCODE, :PSTDT, :PSTUC, :PENUC, :PSTVT, :PENVT ) OPBAL,
INFOTBLM.DEBIT    ( L5.PKCODE, :PSTDT,:PENDT, :PSTUC, :PENUC, :PSTVT, :PENVT ) AMNTDR,
INFOTBLM.CREDIT ( L5.PKCODE, :PSTDT,:PENDT, :PSTUC, :PENUC, :PSTVT, :PENVT ) AMNTCR

FROM   FSLVL  L1, FSLVL L2,  FSMAST L5

WHERE  L2.FKCODE  =  L1.PKCODE
AND        L5.FKCODE  =  L2.PKCODE

AND        L5.PKCODE Between :PSTCD AND NVL(:PENCD,:PSTCD)

GROUP BY  L1.PKCODE ,  L1.NAME , L1.LVL ,
                 L2.PKCODE , L2.NAME ,  L2.LVL ,
                 L5.PKCODE , L5.NAME 

ORDER BY L1.PKCODE, L2.PKCODE,  L5.PKCODE