Di bawah ini saya memberikan contoh fungsi tersimpan Oracle untuk mengonversi jumlah mata uang dalam kata-kata menggunakan PL/SQL. Misalnya, jumlah $123,45 akan diterjemahkan sebagai Seratus Dua Puluh Tiga Dolar dan Empat Puluh Lima Sen. Anda juga dapat mengubah mata uang dalam fungsi, misalnya, Rupee dan Paise.
Fungsi Oracle PL/SQL untuk Mengonversi Jumlah Mata Uang dalam Kata-kata
Fungsi tersimpan Oracle PL/SQL berikut menerima argumen numerik dan tidak memiliki batasan. Suatu bilangan dapat berupa bilangan desimal, bilangan bulat, dan bilangan negatif. Fungsi jumlah_dalam_kata memiliki fungsi di dalam check_if_single , dan fungsi check_if_single memiliki n_spell berfungsi di dalam untuk mengonversi jumlah mata uang dalam kata-kata. Saya berpikir untuk membuat paket daripada fungsi ini, tetapi saya pikir hanya fungsi yang lebih mudah untuk dipelihara.
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; /
Uji
SELECT amount_in_words (89378.58) FROM DUAL;
Keluaran
Eighty-Nine Thousand Three Hundred Seventy-Eight Dollar and Fifty-Eight Cents
Uji melalui tabel
SELECT client_code, balance_amt, amount_in_words (balance_amt) balance_amount_in_words FROM account_balance;
Keluaran
CLIENT_CODE | BALANCE_AMT | BALANCE_AMOUNT_IN_WORDS |
---|---|---|
88499 | 78849,98 | Tujuh Puluh Delapan Ribu Delapan Ratus Empat Puluh Sembilan Dolar Sembilan Puluh Delapan Sen |
77493 | 7738829.15 | Tujuh Juta Tujuh Ratus Tiga Puluh Delapan Ribu Delapan Ratus Dua Puluh Sembilan Dolar Lima Belas sen |
88399 | 99836662388.98 | Sembilan Puluh Sembilan Miliar Delapan Ratus Tiga Puluh Enam Juta Enam Ratus Enam Puluh Dua Ribu Tiga Ratus Delapan Puluh Delapan Dolar Sembilan Puluh Delapan Sen |
97737 | -88993.5 | Negatif Delapan Puluh Delapan Ribu Sembilan Ratus Sembilan Puluh Tiga Dolar Lima Puluh Sen |
88948 | 998349 | Sembilan Ratus Sembilan Puluh Delapan Ribu Tiga Ratus Empat Puluh Sembilan Dolar |
Anda dapat mengubah mata uang saat memanggil check_if_single fungsi dari amount_in_words fungsi. Misalnya, saya mengubah ke Rupee dan Paise di bagian kode PL/SQL berikut:
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;
Uji setelah melakukan perubahan
SELECT amount_in_words (7836.58) in_words FROM DUAL;
Keluaran
Seven Thousand Eight Hundred Thirty-Six Rupees and Fifty-Eight Paise
Mungkin Anda perlu menggeser kata Rupee dari akhir ke posisi awal baris tergantung pada format mata uang Anda dan yang dapat diubah dalam fungsi di atas dengan mudah.
Lihat juga:
- Utilitas:Membuat Prosedur PL/SQL untuk Mengekspor Data Dari Tabel dalam 2 Menit