Unten gebe ich ein Beispiel für eine gespeicherte Oracle-Funktion zum Konvertieren von Währungsbeträgen in Wörtern mit PL/SQL. Zum Beispiel würde der Betrag von 123,45 $ als einhundertdreiundzwanzig Dollar und fünfundvierzig Cent übersetzt. Außerdem können Sie die Währung in Funktion ändern, z. B. Rupien und Paise.
Oracle PL/SQL-Funktion zum Konvertieren des Währungsbetrags in Wörtern
Die folgende gespeicherte Oracle PL/SQL-Funktion akzeptiert ein numerisches Argument und hat keine Einschränkungen. Eine Zahl kann eine Dezimalzahl, eine ganze Zahl und eine negative Zahl sein. Die Funktion amount_in_words hat eine Funktion innerhalb von check_if_single , und die check_if_single-Funktion hat ein n_spell Funktion im Inneren, um den Währungsbetrag in Wörter umzuwandeln. Ich dachte daran, ein Paket anstelle dieser Funktion zu erstellen, aber ich dachte, dass nur eine Funktion einfacher zu warten wäre.
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; /
Test
SELECT amount_in_words (89378.58) FROM DUAL;
Ausgabe
Eighty-Nine Thousand Three Hundred Seventy-Eight Dollar and Fifty-Eight Cents
Durch eine Tabelle testen
SELECT client_code, balance_amt, amount_in_words (balance_amt) balance_amount_in_words FROM account_balance;
Ausgabe
CLIENT_CODE | BALANCE_AMT | BALANCE_AMOUNT_IN_WORDS |
---|---|---|
88499 | 78849,98 | Achtundsiebzigtausendachthundertneunundvierzig Dollar und achtundneunzig Cent |
77493 | 7738829.15 | Sieben Millionen Siebenhundertachtunddreißigtausendachthundertneunundzwanzig Dollar und fünfzehn Cent |
88399 | 99836662388,98 | Neunundneunzig Milliarden Achthundertsechsunddreißig Millionen Sechshundertzweiundsechzigtausenddreihundertachtundachtzig Dollar und achtundneunzig Cent |
97737 | -88993.5 | Minus achtundachtzigtausendneunhundertdreiundneunzig Dollar und fünfzig Cent |
88948 | 998349 | Neunhundertachtundneunzigtausenddreihundertneunundvierzig Dollar |
Beim Aufruf von check_if_single können Sie die Währung ändern Funktion von amount_in_words Funktion. Zum Beispiel habe ich im folgenden Teil des PL/SQL-Codes zu Rupees and Paise geändert:
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;
Nach der Änderung testen
SELECT amount_in_words (7836.58) in_words FROM DUAL;
Ausgabe
Seven Thousand Eight Hundred Thirty-Six Rupees and Fifty-Eight Paise
Möglicherweise müssen Sie das Wort Rupees von der End- zur Startposition der Zeile verschieben, abhängig von Ihrem Währungsformat und das kann in der obigen Funktion einfach geändert werden.
Siehe auch:
- Hilfsprogramm:Generieren Sie eine PL/SQL-Prozedur zum Exportieren von Daten aus einer Tabelle in 2 Minuten