2011-08-30 21 views
0

我有以下代碼禁止ORA-01403:沒有找到數據錯誤時拋出

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 

現在的問題是,可能沒有在表中特定的貨幣數據,但有可能會爲成爲數據「美元'貨幣。所以基本上我想選擇總和到我的變量,如果沒有數據我想我的存儲過程繼續,而不是拋出01403異常。

我不想把每個select都放到BEGIN EXCEPTION END塊的語句中,所以有什麼方法可以抑制異常,並且只需將v_balance變量保留在未定義(NULL)狀態而不需要異常塊?

+1

SUM集合函數,如果沒有匹配不拋出異常,只是返回null。你的代碼應該已經做到了你想要的。 –

回答

2
select nvl(balance,0) 
into v_balance 
from 
(
    select sum(nvl(book_value,0)) as balance 
    from account_details 
    where currency = 'UGX' 
); 
+3

您的賬單相當於從賬戶細目 中選擇nvl(sum(book_value),0)到v_balance ,其中currency ='UGX' –

+0

正確且比內部選擇更簡單: – edvaldig

0
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 
+0

您可以添加任何解釋給其他人如果他們遇到這個問題,他們會重現你的嘗試來解決這個問題,因爲他們包含了一個熟悉的問題? – dhein

相關問題