Saltar al contenido

Convertir número a letras en Oracle

Convertir número a letras en Oracle, es particularmente importante en aplicaciones financieras y contables donde se necesitan presentar valores numéricos en un formato más legible para los usuarios.

En Oracle, esto se puede lograr mediante la creación de una función que convierte un número en su equivalente en letras para esto te exorto ver este articulo hasta el final.

Índice

    Como convertir a letras ?

    En el mundo de la programación, una tarea común es la conversión de valores numéricos a una cadena de caracteres, esto ya lo vimos en sql server , Postgresql y mysql donde ya tenemos esta función definida.

    La función toma un número como entrada y devuelve su representación en letras, por ejemplo, convierte el número 1234.56 en «mil doscientos treinta y cuatro dólares con cincuenta y seis centavos».

    La función se puede utilizar para imprimir cheques y en otros contextos donde se necesite presentar valores numéricos en su forma textual.

    Herramientas requeridas

    Para crear una función en Oracle que convierta un número en su equivalente en letras, necesitarás tener acceso a una herramienta que te permita conectarte.

    A continuación, te proporciono una lista de herramientas que podrías utilizar:

    1. Oracle SQL Developer: es una herramienta gratuita que te permite conectarte a la base de datos y realizar tareas de administracion.
    2. Oracle Database Express Edition (XE): es una edición gratuita de la base de datos Oracle que se puede descargar e instalar en tu computadora.

    Script de PL/SQL

    CREATE OR REPLACE PACKAGE mi_paquete AS
      FUNCTION numero_a_letras(p_numero IN NUMBER) RETURN VARCHAR2;
    END mi_paquete;
    /
    
    CREATE OR REPLACE PACKAGE BODY mi_paquete AS
      FUNCTION numero_a_letras(p_numero IN NUMBER) RETURN VARCHAR2 AS
        v_centimos NUMBER(18,2);
        v_enteros  NUMBER(18);
        v_millones NUMBER(18);
        v_miles    NUMBER(18);
        v_cientos  NUMBER(18);
        v_letras   VARCHAR2(200);
        v_aux      VARCHAR2(200);
        v_unidad   VARCHAR2(3);
        v_decimal  VARCHAR2(3);
      BEGIN
        -- Dividimos el número en sus partes enteras y decimales
        v_enteros  := TRUNC(p_numero);
        v_centimos := ROUND(MOD(p_numero, 1), 2);
        
        -- Convertimos la parte decimal en letras
        IF v_centimos > 0 THEN
          v_decimal := 'con ' || TO_CHAR(v_centimos*100, 'FM00') || '/100';
        ELSE
          v_decimal := '';
        END IF;
        
        -- Convertimos la parte entera en letras
        IF v_enteros = 0 THEN
          v_letras := 'cero ';
        ELSE
          -- Convertimos los millones
          v_millones := TRUNC(v_enteros / 1000000);
          IF v_millones > 0 THEN
            v_aux    := mi_paquete.numero_a_letras(v_millones);
            v_letras := v_letras || v_aux || ' millones ';
            v_enteros := MOD(v_enteros, 1000000);
          END IF;
          
          -- Convertimos los miles
          v_miles := TRUNC(v_enteros / 1000);
          IF v_miles > 0 THEN
            v_aux    := mi_paquete.numero_a_letras(v_miles);
            v_letras := v_letras || v_aux || ' mil ';
            v_enteros := MOD(v_enteros, 1000);
          END IF;
          
          -- Convertimos los cientos
          v_cientos := TRUNC(v_enteros / 100);
          IF v_cientos > 0 THEN
            v_unidad  := CASE v_cientos
                           WHEN 1 THEN 'cien '
                           ELSE mi_paquete.numero_a_letras(v_cientos) || 'cientos '
                         END;
            v_letras := v_letras || v_unidad;
            v_enteros := MOD(v_enteros, 100);
          END IF;
          
          -- Convertimos las unidades
          IF v_enteros > 0 THEN
            v_unidad  := CASE v_enteros
                           WHEN 1 THEN 'un '
                           WHEN 2 THEN 'dos '
                           WHEN 3 THEN 'tres '
                           WHEN 4 THEN 'cuatro '
                           WHEN 5 THEN 'cinco '
                           WHEN 6 THEN 'seis '
                           WHEN 7 THEN 'siete '
                           WHEN 8 THEN 'ocho '
                           WHEN 9 THEN 'nueve '
                           ELSE ''
                         END;
            v_letras := v_letras || v_unidad;
          END IF;
        END IF;
        
        -- Agregamos la parte decimal en letras
        v_letras := TRIM(v_letras) || ' ' || v_decimal;
        
        -- Retornamos el resultado
        RETURN UPPER(v
    END numero_a_letras;
    END mi_paquete;

    Conclusion

    Ahora que sabes cómo convertir números en letras en Oracle, ¿por qué no poner en práctica esta habilidad en tus propios proyectos? Agrega esta función a un paquete de Oracle y comienza a usarla en tus consultas y aplicaciones.

    ¿Te gustaría aprender más sobre programación en Oracle? Consulta la documentación oficial de Oracle y nuestra selección de cursos en línea.

    ¡Aprende a programar en Oracle y lleva tus habilidades de programación al siguiente nivel!