सुनिश्चित करें कि आप NUMBER
का उपयोग करने के बजाय संख्या डेटा-प्रकार का उपयोग डेटा के लिए उपयुक्त पैमाने और सटीकता के साथ करते हैं बिना पैमाने और सटीकता के। यदि आप डॉलर/यूरो/पाउंड/आदि का भंडारण करने जा रहे हैं। फिर सकल विश्व उत्पाद
2014 में $100,000,000,000,000 के क्रम में था। मान लें कि आप इससे अधिक का सौदा नहीं करने जा रहे हैं तो आपका मुद्रा कॉलम हो सकता है:
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;
/