Deseo un código para un programa de facturación que permita pasar números en dígitos a texto

Saludos Expertos,
Alguno de Uds. Tiene código PL/SQL que te permita convertir números a letras ... Estoy haciendo el reporte de una factura y necesito mostrar el NETO A PAGAR tanto en números como en letras.
Gr@ci@s de @ntem@no !

1 respuesta

Respuesta
1
Espero que te sirva es un procedimiento de base de datos
CREATE OR REPLACE FUNCTION Letras (cia in varchar2, cta in varchar2, numero In NUMBER) RETURN CHAR IS
/* RESULTADO: Retorna numero en letras con la moneda de una
cuenta de una compa?ia.
*/
/* variables de la funcion letras */
temp NUMBER;
va_descmon varchar2(20);
va_moneda varchar2(2);
FUNCTION nombre_decenas (digito IN NUMBER) RETURN CHAR IS
BEGIN
if digito = 1 then
return('DIECI');
elsif digito = 2 then
return('VEINTI');
elsif digito = 3 then
return('TREINTA');
elsif digito = 4 then
return('CUARENTA');
elsif digito = 5 then
return('CINCUENTA');
elsif digito = 6 then
return('SESENTA');
elsif digito = 7 then
return('SETENTA');
elsif digito = 8 then
return('OCHENTA');
elsif digito = 9 then
return('NOVENTA');
elsif digito = 0 then
return('CERO');
else
return('');
end if;
END;
FUNCTION Unidades (unidad IN NUMBER) RETURN CHAR IS
-- Convierte los numero desde 0 hasta 9 a letras
BEGIN
if unidad = 1 then
return('UNO');
elsif unidad = 2 then
return('DOS');
elsif unidad = 3 then
return('TRES');
elsif unidad = 4 then
return('CUATRO');
elsif unidad = 5 then
return('CINCO');
elsif unidad = 6 then
return('SEIS');
elsif unidad = 7 then
return('SIETE');
elsif unidad = 8 then
return('OCHO');
elsif unidad = 9 then
return('NUEVE');
elsif unidad = 0 then
return('CERO');
else
return('');
end if;
END;
FUNCTION decenas (decena IN NUMBER) RETURN CHAR IS
-- Convierte numeros de dos digitos a letras
numero varchar2(2);
digitos number;
digito1 number;
digito2 number;
BEGIN
numero := to_char(decena);
digitos := length(numero);
if digitos = 1 then -- Si tiene solo un digito entoces devuelve unidades
return unidades(decena);
elsif digitos = 2 then -- Esto es en el caso de dos digitos
if decena = 10 then -- Estos son casos especiales del 10 a 15
return('DIEZ');
elsif decena = 11 then
return('ONCE');
elsif decena = 12 then
return('DOCE');
elsif decena = 13 then
return('TRECE');
elsif decena = 14 then
return('CATORCE');
elsif decena = 15 then
return('QUINCE');
elsif decena = 20 then
return('VEINTE');
else
digito1 := to_number(substr(numero,1,1));
digito2 := to_number(substr(numero,2,1));
if digito1 = 1 then -- Estos los casos de 16 al 19
return('DIECI'||unidades(digito2));
elsif digito1 = 2 then -- Estos son los casos del 21 al 29
return('VEINTI'||unidades(digito2));
else -- El resto de los casos
if digito2 = 0 then
return(nombre_decenas(digito1));
else
return(nombre_decenas(digito1)||' y '||unidades(digito2));
end if;
end if;
end if;
else
return('');
end if;
END;
FUNCTION cientos (cien IN NUMBER) RETURN CHAR IS
-- convierte numeros de tres o menos digitos as letras
numero varchar2(3);
digitos number;
digito1 number;
digito23 number;
BEGIN
numero := to_char(cien);
digitos := length(numero);
if digitos <= 2 then -- En el caso de que el numero sea de uno
return(decenas(cien)); -- o dos digitos
elsif digitos = 3 then -- En el caso de que sean tres digitos
digito1 := to_number(substr(numero,1,1));
digito23 := to_number(substr(numero,2,2));
if digito1 = 1 then -- El caso del cien
if digito23 = 0 then
return('CIEN');
else
return('CIENTO '||decenas(digito23));
end if;
elsif digito1 = 5 then -- El caso de los quinientos
if digito23 = 0 then
return('QUINIENTOS');
else
return('QUINIENTOS '||decenas(digito23));
end if;
elsif digito1 = 9 then -- El caso de los novecientos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas