我需要2位小數,顯示貨幣字段。
確保您使用具有適合數據的比例和精度的數字數據類型,而不使用NUMBER
而沒有比例和精度。如果你打算存儲美元/歐元/磅/等。那麼Gross World Product是的$ 100,000,000,000,000在2014年的訂單讓我們假設你是不是將要處理超過此[來源請求]那麼你的貨幣列可以是:
NUMBER(17,2)
如果你得到一個價值大於此值,那麼您需要對您的數據執行完整性檢查,並考慮一個比世界總產品更大的數額是否合理。如果您要將這些值存儲爲例如日元或津巴布韋元,請適當調整比例。
你甚至可以在一個包中定義一個子類:
CREATE PACKAGE currencies_pkg IS
SUBTYPE currency_type IS NUMBER(17,2);
FUNCTION formatCurrency(
amount IN CURRENCY_TYPE
) RETURN VARCHAR2;
END;
/
您的代碼格式化,可以這樣:
CREATE PACKAGE BODY currencies_pkg IS
FUNCTION formatCurrency(
amount IN CURRENCY_TYPE
) RETURN VARCHAR2
IS
BEGIN
RETURN TO_CHAR(currency_value, 'FM999999999999990D00');
END;
END;
/
然後,如果你引用的子類型的存儲過程/包,您將無法超過貨幣數據類型的最大大小,而不會引發異常。顯示值的格式模型只需要在一個地方定義,並且由於輸入限於貨幣子類型,所以格式化函數將永遠不會超過強加的比例/精度,並且不能輸出#
。
CREATE PROCEDURE your_procedure(
in_value1 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE,
in_value2 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE
)
IS
v_value CURRENCIES_PKG.CURRENCY_TYPE;
BEGIN
-- Do something
v_value := in_value1 + in_value2;
-- Output formatted value
DBMS_OUTPUT.PUT_LINE(CURRENCIES_PKG.formatCurrency(v_value));
END;
/
來源
2017-12-18 09:15:24
MT0
對於較大的數字,增加格式說明符中的9。 –
我會很感激,如果下來的選民可以解釋爲什麼...... :( – PAVITRA