Di seguito sto fornendo un esempio della funzione memorizzata Oracle per convertire l'importo della valuta in parole utilizzando PL/SQL. Ad esempio, l'importo di $ 123,45 si tradurrebbe in centoventitre dollari e quarantacinque centesimi. Inoltre, puoi cambiare la valuta in funzione, ad esempio Rupie e Paise.
Funzione Oracle PL/SQL per convertire l'importo in valuta in parole
La seguente funzione memorizzata Oracle PL/SQL accetta un argomento numerico e non ha limitazioni. Un numero può essere un numero decimale, intero e negativo. La funzione importo_in_parole ha una funzione all'interno di check_if_single e la funzione check_if_single ha un n_spell funzione all'interno per convertire l'importo della valuta in parole. Stavo pensando di creare un pacchetto invece di questa funzione, ma ho pensato che solo una funzione sarebbe stata più facile da mantenere.
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;
Uscita
Eighty-Nine Thousand Three Hundred Seventy-Eight Dollar and Fifty-Eight Cents
Test attraverso una tabella
SELECT client_code, balance_amt, amount_in_words (balance_amt) balance_amount_in_words FROM account_balance;
Uscita
CLIENT_CODE | BALANCE_AMT | BALANCE_AMOUNT_IN_WORDS |
---|---|---|
88499 | 78849.98 | Settantottomilaottocentoquarantanove dollari e novantotto centesimi |
77493 | 7738829.15 | Sette milioni settecentotrentottomilaottocentoventinove dollari e quindici centesimi |
88399 | 99836662388.98 | Novantanove miliardi Ottocentotrentasei milioni Seicentosessantaduemilatrecentoottantotto dollari e novantotto centesimi |
97737 | -88993.5 | Negativo ottantottomila novecentonovantatre dollari e cinquanta centesimi |
88948 | 998349 | Novecentonovantottomilatrecentoquarantanove dollari |
Puoi cambiare la valuta quando chiami il check_if_single funzione da importo_in_parole funzione. Ad esempio, sono passato a Rupees e Paise nella parte seguente del codice 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;
Test dopo aver apportato la modifica
SELECT amount_in_words (7836.58) in_words FROM DUAL;
Uscita
Seven Thousand Eight Hundred Thirty-Six Rupees and Fifty-Eight Paise
Forse hai bisogno di spostare la parola Rupie dalla posizione finale a quella iniziale della linea a seconda del formato della tua valuta e che può essere facilmente modificata nella funzione sopra.
Vedi anche:
- Utilità:genera procedura PL/SQL per esportare dati da una tabella in 2 minuti