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