[英]Oracle SQL Developer Output Number Formatting (To_Char Problem)
[英]Number formatting in Oracle using TO_CHAR
在ORACLE存儲過程中格式化數字的正確方法。
我需要顯示2位小數的貨幣字段。 預期輸出如下:
下面為我工作:
select to_char(9876.23 , 'fm999990.00') from dual;
但這存在硬編碼一堆9的問題。 如果我提供更大的數字,它將顯示為“ ###############”
我還有其他方法可以做到嗎?
我需要顯示2位小數的貨幣字段。
確保使用數字數據類型,其小數位數和精度適合於數據,而不要使用沒有小數位數和精度的NUMBER
。 如果您要存儲美元/歐元/英鎊/等。 那么2014年世界生產總值(Gross World Product )約為1億億美元。假設您處理的金額不會超過[需要的引文],那么您的貨幣欄可以是:
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;
/
為什么“對一堆9s進行硬編碼”是一個問題? (如果您打算使用TO_CHAR,這就是您需要執行的操作)
select to_char(9876.23 , 'fm9999999999999999999990D00') from dual;
PS; 您可能要考慮使用D
而不是.
(並非每個國家都使用.
作為小數點分隔符D
語言敏感,並且會使用適當的符號)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.