Dưới đây tôi đưa ra một ví dụ về chức năng được lưu trữ của Oracle để chuyển đổi số tiền tệ bằng chữ bằng cách sử dụng PL / SQL. Ví dụ:số tiền 123,45 đô la sẽ được dịch là Một trăm hai mươi ba đô la và bốn mươi lăm xu. Ngoài ra, bạn có thể thay đổi đơn vị tiền tệ trong chức năng, chẳng hạn như Rupee và Paise.
Oracle PL / SQL Hàm để chuyển đổi số tiền tệ thành từ ngữ
Hàm lưu trữ Oracle PL / SQL sau đây chấp nhận một đối số số và không có giới hạn. Một số có thể là số thập phân, số nguyên và số âm. Hàm amount_in_words có một chức năng bên trong check_if_single và hàm check_if_single có n_spell chức năng bên trong để chuyển đổi số tiền tệ bằng chữ. Tôi đã nghĩ đến việc tạo một gói thay vì hàm này, nhưng tôi nghĩ rằng chỉ một hàm sẽ dễ bảo trì hơn.
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; /
Kiểm tra
SELECT amount_in_words (89378.58) FROM DUAL;
Đầu ra
Eighty-Nine Thousand Three Hundred Seventy-Eight Dollar and Fifty-Eight Cents
Kiểm tra qua bảng
SELECT client_code, balance_amt, amount_in_words (balance_amt) balance_amount_in_words FROM account_balance;
Đầu ra
CLIENT_CODE | BALANCE_AMT | BALANCE_AMOUNT_IN_WORDS |
---|---|---|
88499 | 78849,98 | Bảy mươi tám nghìn tám trăm bốn mươi chín đô la và chín mươi tám xu |
77493 | 7738829.15 | Bảy triệu bảy trăm ba mươi tám nghìn tám trăm hai mươi chín đô la và mười lăm xu |
88399 | 99836662388,98 | Chín mươi chín tỷ tám trăm ba mươi sáu triệu sáu trăm sáu mươi hai nghìn ba trăm tám mươi tám đô la và chín mươi tám xu |
97737 | - 88993,5 | Âm tám mươi tám nghìn chín trăm chín mươi ba đô la và năm mươi xu |
88948 | 998349 | Chín trăm chín mươi tám nghìn ba trăm bốn mươi chín đô la |
Bạn có thể thay đổi đơn vị tiền tệ khi gọi check_if_single chức năng từ amount_in_words hàm số. Ví dụ:tôi đã thay đổi thành Rupees và Paise trong phần sau của mã 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;
Kiểm tra sau khi thực hiện thay đổi
SELECT amount_in_words (7836.58) in_words FROM DUAL;
Đầu ra
Seven Thousand Eight Hundred Thirty-Six Rupees and Fifty-Eight Paise
Có thể bạn cần chuyển từ Rupees từ vị trí cuối sang vị trí bắt đầu của dòng tùy thuộc vào định dạng tiền tệ của bạn và có thể thay đổi dễ dàng trong hàm trên.
Xem thêm:
- Tiện ích:Tạo quy trình PL / SQL để xuất dữ liệu từ bảng trong 2 phút