RE:PROGRAMA PL/SQL CONVERTIR NUMEROS EN LETRAS
HOLA
MIRA ESTE ES UN PACKAGE QUE TIENE UN PAR DE FUNCIONES PARA CONVERTIR LOS NUMEROS A LETRAS LO PUEDES PONER EN
LA BASE Y LLAMARLA DESDE DONDE LA NECESITAS QUE TE DEVOLVERA EL VALOR EN ELTRAS DEL NUMERO QUE LE ENVIASTES COMO PARAMETRO
EJEMPLO DE LA LLAMADA
MONTO_LETRAS := PR_num_a_letras.dintex(NVL(VALOR,0));
************************PACKAGES ENCABEZADO****************************
CREATE OR REPLACE PACKAGE PR_NUM_A_LETRAS IS
--
-- Retrofitted
FUNCTION DinTex( x IN number )RETURN varchar2;
--
-- Retrofitted
FUNCTION NumTex( x IN number )
RETURN varchar2;
PRAGMA RESTRICT_REFERENCES (dintex, WNDS, WNPS);
PRAGMA RESTRICT_REFERENCES (numtex, WNDS, WNPS);
END PR_NUM_A_LETRAS;
/
************************PACKAGES BODY****************************
CREATE OR REPLACE PACKAGE BODY PR_NUM_A_LETRAS AS
--
-- Retrofitted
FUNCTION Excepcion(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION Decena(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION Centena(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION Diez(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION Cien(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION mil(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION Millon(
i IN integer )
RETURN varchar2;
--
-- Retrofitted
FUNCTION Excepcion(
i IN integer )
RETURN varchar2 IS
--
--
v_r VARCHAR2(15);
BEGIN
IF i < 10 THEN
SELECT
DECODE(i, 0, '', 1, 'un', 2, 'dos', 3, 'tres', 4, 'cuatro',
5, 'cinco', 6, 'seis', 7, 'siete', 8, 'ocho', 9, 'nueve')
INTO
v_r
FROM
dual;
ELSIF
i < 20 THEN
SELECT
DECODE(i, 10, 'diez', 11, 'once', 12, 'doce', 13, 'trece',
14, 'catorce', 15, 'quince', 16, 'dieciseis', 17, 'diecisiete',
18, 'dieciocho', 19, 'diecinueve')
INTO
v_r
FROM
dual;
ELSE
SELECT
DECODE(i, 20, 'veinte', 21, 'veintiun', 22, 'veintidos',
23, 'veintitres', 24, 'veinticuatro', 25, 'veinticinco',
26, 'veintiseis', 27, 'veintisiete', 28, 'veintiocho',
29, 'veintinueve')
INTO
v_r
FROM
dual;
END IF;
RETURN v_r;
END;
--
-- Retrofitted
FUNCTION Decena(
i IN integer )
RETURN varchar2 IS
--
--
v_r VARCHAR2(15);
BEGIN
SELECT
DECODE(i, 0, '', 1, '', 2, '', 3, 'treinta', 4, 'cuarenta',
5, 'cincuenta', 6, 'sesenta', 7, 'setenta', 8, 'ochenta',
9, 'noventa')
INTO
v_r
FROM
dual;
RETURN v_r;
END;
--
-- Retrofitted
FUNCTION Centena(
i IN integer )
RETURN varchar2 IS
--
--
v_r VARCHAR2(15);
BEGIN
SELECT
DECODE(i, 0, '', 1, 'ciento', 2, 'doscientos', 3, 'trescientos',
4, 'cuatrocientos', 5, 'quinientos', 6, 'seiscientos', 7, 'setecientos',
8, 'ochocientos', 9, 'novecientos')
INTO
v_r
FROM
dual;
RETURN v_r;
END;
--
-- Retrofitted
FUNCTION Diez(
i IN integer )
RETURN varchar2 IS
--
--
TDiez VARCHAR2(50);
BEGIN
IF i < 30 THEN
TDiez := Excepcion(i);
ELSE
TDiez := Decena(TRUNC(i/10));
IF MOD(i, 10) <> 0 THEN
TDiez := TDiez || ' y '|| excepcion(i MOD 10);
END IF;
END IF;
RETURN(TDiez);
END;
--
-- Retrofitted
FUNCTION Cien(
i IN integer )
RETURN varchar2 IS
--
--
TCien VARCHAR2(50);
BEGIN
IF i = 100 THEN
TCien := 'cien';
ELSE
TCien := centena(TRUNC(i / 100));
IF MOD(i, 100) <> 0 THEN
IF TRUNC(i / 100) <> 0 THEN
TCien := TCien || ' ';
END IF;
TCien := TCien || diez(MOD(i, 100));
END IF;
END IF;
RETURN(TCien);
END;
--
-- Retrofitted
FUNCTION mil(
i IN integer )
RETURN varchar2 IS
--
--
TMil VARCHAR2(100);
BEGIN
IF TRUNC(i/1000) = 1 THEN
TMil := 'mil';
IF MOD(i, 1000) <> 0 THEN
TMil := TMil || ' ';
END IF;
TMil := TMil || Cien(MOD(i, 1000));
ELSIF
TRUNC(i/1000) = 0 THEN
TMil := Cien(i);
ELSE
TMil := Cien(TRUNC(i/1000)) || ' mil';
IF MOD(i, 1000) <> 0 THEN
TMil := TMil || ' ';
END IF;
TMil := TMil || Cien(MOD(i, 1000));
END IF;
RETURN(TMil);
END;
--
-- Retrofitted
FUNCTION Millon(
i IN integer )
RETURN varchar2 IS
--
--
TMillon VARCHAR2(150);
BEGIN
IF i >= 0 THEN
IF i = 0 THEN
TMillon := 'cero';
ELSIF
TRUNC(i/1000000) = 0 THEN
TMillon := Mil(i);
ELSIF
TRUNC(i/1000000) = 1 THEN
TMillon := 'un millon';
IF MOD(i, 1000000) <> 0 THEN
TMillon := TMillon || ' ';
END IF;
TMillon := TMillon || Mil(MOD(i, 1000000));
ELSE
TMillon := Mil(TRUNC(i/1000000)) || ' millones';
IF(MOD(i, 1000000)) <>0 THEN
TMillon := TMillon || ' ';
END IF;
TMillon := TMillon || Mil(MOD(i, 1000000));
END IF;
IF(MOD(i, 10) =1) AND(MOD(i, 100) <> 11) THEN
TMillon := TMillon || 'o';
END IF;
END IF;
RETURN(TMillon);
END;
--
-- Retrofitted
FUNCTION DinTex(
x IN number )
RETURN varchar2 IS
--
--
Texto VARCHAR2(150);
--
--
IntX NUMBER;
--
--
FraX INTEGER;
BEGIN
IF x < 2147483647 AND x >= 0 THEN
Intx := TRUNC(x);
Texto := Millon(Intx);
FraX := TRUNC((x - Intx) * 100 + 0.5);
Texto := Texto || TO_CHAR(Frax, '00') || '/100';
END IF;
RETURN(Texto);
END;
--
-- Retrofitted
FUNCTION NumTex(
x IN number )
RETURN varchar2 IS
--
--
Texto VARCHAR2(150);
--
--
IntX NUMBER;
BEGIN
IF x < 2147483647 AND x >= 0 THEN
Intx := TRUNC(x);
Texto := Millon(Intx);
END IF;
RETURN(Texto);
END;
END PR_NUM_A_LETRAS;
/