Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle:PL/SQL का उपयोग करके मुद्रा राशि को शब्दों में बदलें

नीचे मैं पीएल/एसक्यूएल का उपयोग करके मुद्रा राशि को शब्दों में बदलने के लिए ओरेकल संग्रहीत फ़ंक्शन का एक उदाहरण दे रहा हूं। उदाहरण के लिए, $123.45 की राशि एक सौ तेईस डॉलर और पैंतालीस सेंट के रूप में अनुवादित होगी। इसके अलावा, आप मुद्रा को फ़ंक्शन में बदल सकते हैं, उदाहरण के लिए, रुपए और पैसे।

मुद्रा राशि को शब्दों में बदलने के लिए Oracle PL/SQL फ़ंक्शन

निम्नलिखित Oracle PL/SQL संग्रहीत फ़ंक्शन एक संख्यात्मक तर्क को स्वीकार करता है और इसकी कोई सीमा नहीं है। एक संख्या दशमलव, पूर्णांक और ऋणात्मक संख्या हो सकती है। फ़ंक्शन amount_in_words check_if_single . के अंदर एक फ़ंक्शन है , और check_if_single फ़ंक्शन में एक n_spell . है मुद्रा राशि को शब्दों में बदलने के लिए अंदर कार्य करें। मैं इस फ़ंक्शन के बजाय एक पैकेज बनाने के बारे में सोच रहा था, लेकिन मैंने सोचा कि केवल एक फ़ंक्शन को बनाए रखना आसान होगा।

CREATE OR REPLACE FUNCTION amount_in_words (i_amt IN NUMBER)
   RETURN VARCHAR2
IS
   n_dollar   NUMBER;
   n_cents    NUMBER;

   FUNCTION check_if_single (i_num IN NUMBER, currency IN VARCHAR2)
      RETURN VARCHAR2
   IS
      FUNCTION n_spell (i_num IN NUMBER)
         RETURN VARCHAR2
      AS
         TYPE w_Array IS TABLE OF VARCHAR2 (255);

         l_str w_array
               := w_array ('',
                           ' thousand ',
                           ' million ',
                           ' billion ',
                           ' trillion ',
                           ' quadrillion ',
                           ' quintillion ',
                           ' sextillion ',
                           ' septillion ',
                           ' octillion ',
                           ' nonillion ',
                           ' decillion ',
                           ' undecillion ',
                           ' duodecillion ');

         l_num           VARCHAR2 (50) DEFAULT TRUNC (i_num);
         l_is_negative   BOOLEAN := FALSE;
         l_return        VARCHAR2 (4000);
      BEGIN
         IF SIGN (i_num) = -1
         THEN
            l_is_negative := TRUE;
            l_num := TRUNC (ABS (i_num));
         END IF;

         FOR i IN 1 .. l_str.COUNT
         LOOP
            EXIT WHEN l_num IS NULL;

            IF (SUBSTR (l_num, LENGTH (l_num) - 2, 3) <> 0)
            THEN
               l_return :=
                  TO_CHAR (
                     TO_DATE (SUBSTR (l_num, LENGTH (l_num) - 2, 3), 'J'),
                     'Jsp')
                  || l_str (i)
                  || l_return;
            END IF;

            l_num := SUBSTR (l_num, 1, LENGTH (l_num) - 3);
         END LOOP;

         IF NOT l_is_negative
         THEN
            RETURN INITCAP (l_return);
         ELSE
            RETURN 'Negative ' || INITCAP (l_return);
         END IF;
      END n_spell;
   BEGIN
      IF i_num = 1
      THEN
         RETURN 'One ' || currency;
      ELSE
         RETURN n_spell (i_num) || ' ' || currency;
      END IF;
   END check_if_single;
BEGIN
   IF i_amt IS NULL
   THEN
      RETURN '';
   END IF;

   n_dollar := TRUNC (i_amt);
   n_cents := (ABS (i_amt) - TRUNC (ABS (i_amt))) * 100;

   IF NVL (n_cents, 0) > 0
   THEN
      RETURN    check_if_single (n_dollar, 'Dollar')
             || ' and '
             || check_if_single (n_cents, 'Cents');
   ELSE
      RETURN check_if_single (n_dollar, 'Dollar');
   END IF;
END amount_in_words;
/

परीक्षा

SELECT amount_in_words (89378.58) FROM DUAL;

आउटपुट

Eighty-Nine Thousand Three Hundred Seventy-Eight Dollar and Fifty-Eight Cents

तालिका के माध्यम से परीक्षण करें

SELECT client_code,
       balance_amt,
       amount_in_words (balance_amt) balance_amount_in_words
  FROM account_balance;

आउटपुट

CLIENT_CODE BALANCE_AMT BALANCE_AMOUNT_IN_WORDS
88499 78849.98 सत्तर-आठ हजार आठ सौ उनतालीस डॉलर और अट्ठानवे सेंट
77493 7738829.15 सात मिलियन सात सौ अड़तीस हजार आठ सौ उनतीस डॉलर और पंद्रह सेंट
88399 99836662388.98 निन्यानबे अरब आठ सौ छत्तीस मिलियन छह सौ बासठ हजार तीन सौ अस्सी-आठ डॉलर और निन्यानबे सेंट
97737 -88993.5 नकारात्मक अस्सी-आठ हजार नौ सौ निन्यानबे डॉलर और पचास सेंट
88948 998349 नौ सौ निन्यानबे हजार तीन सौ उनतालीस डॉलर

check_if_single . पर कॉल करते समय आप मुद्रा बदल सकते हैं amount_in_words . से कार्य करें समारोह। उदाहरण के लिए, मैं PL/SQL कोड के निम्नलिखित भाग में रुपये और पैसे में बदल गया:

 IF NVL (n_cents, 0) > 0
   THEN
      RETURN    check_if_single (n_dollar, 'Rupees')
             || ' and '
             || check_if_single (n_cents, 'Paise');
   ELSE
      RETURN check_if_single (n_dollar, 'Rupees');
   END IF;

बदलाव करने के बाद परीक्षण करें

SELECT amount_in_words (7836.58) in_words FROM DUAL;

आउटपुट

Seven Thousand Eight Hundred Thirty-Six Rupees and Fifty-Eight Paise

हो सकता है कि आपको अपने मुद्रा प्रारूप के आधार पर रुपये शब्द को अंत से लाइन की प्रारंभिक स्थिति में स्थानांतरित करने की आवश्यकता हो और जिसे उपरोक्त फ़ंक्शन में आसानी से बदला जा सके।

यह भी देखें:

  • उपयोगिता:2 मिनट में तालिका से डेटा निर्यात करने के लिए PL/SQL प्रक्रिया उत्पन्न करें

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL में एक प्रतिस्थापन () फ़ंक्शन के आउटपुट से अल्पविराम सीमांकित स्ट्रिंग के साथ IN क्लॉज का उपयोग करना

  2. Oracle ऐप्स में इतिहास तालिकाएँ पैच करें (11i/R12.1/R12.2)

  3. SQL डेवलपर (Oracle) में CSV फ़ाइल में क्वेरी परिणाम कैसे निर्यात करें

  4. यदि पंक्ति मौजूद नहीं है तो Oracle सम्मिलित करें

  5. JDBC के साथ Oracle डेटाबेस से जुड़ने के लिए URL स्ट्रिंग प्रारूप