Ticker

6/recent/ticker-posts

Convertir expresión con TO_NUMBER - PL/SQL

Función TO_NUMBER():

Se encarga de convertir una expresión (expr) en un valor de tipo de dato NUMBER. Es decir el valor de la expresión (expr) puede ser un valor de tipo de dato  CHAR, VARCHAR2, NCHAR, NVARCHAR2 o BINARY_DOUBLE.

Sintaxis.

TO_NUMBER(expr [, fmt [,nlsparam ] ])

Ejemplo:

Convertir la expresión de tipo de dato VARCHAR2, haciendo uso de la función TO_NUMBER().
DECLARE
      pVARCHAR2 VARCHAR2(50) := '59300.65';--Considerar la cantidad de enteros y decimales en la entrada de datos, es decir si
                                                    --la entrada contiene 5 enteros y 2 decimales (ejemplo - 59300.65 cincuenta y nueve mil 
                                                    --trecientos con sesenta y cinco), nuestro dato de salida debe soporta la longitud de
                                                    --5 enteros y 2 decimas (ejemplo de retorno, '99999.99')
      pNUMBER NUMBER ;
      pNUMBER2 NUMBER; 
BEGIN           
      pNUMBER := TO_NUMBER(pVARCHAR2,'999999999999999999.99');--Incluye los decimales... ejmplo 59300,65
      pNUMBER2:= TO_NUMBER(pVARCHAR2,'999999999999999999D99');--Excluye los decimales...  ejemplo 5930065       
      
      DBMS_OUTPUT.PUT_LINE('Conversion usando punto : ' || pNUMBER);
      DBMS_OUTPUT.PUT_LINE('Conversion usando la letra D : ' || pNUMBER2);
END;
Para poder convertir una expresión en cualquier parte de nuestra implementación sería lo optimo crear una función que realice todo esta conversión, y hacer referencia a dicha función creada.
CREATE OR REPLACE FUNCTION FN_FORMATEO_EXPRESION(
       pVARCHAR2 IN VARCHAR2
) 
RETURN NUMBER IS
  pNUMBER NUMBER;
BEGIN
  pNUMBER := TO_NUMBER(pVARCHAR2 ,'99999999999.99');
  
  RETURN pNUMBER ;
END FN_FORMATEO_EXPRESION;

Validar la función creada:
SELECT MI_ESQUEMA.FN_FORMATEO_EXPRESION('59300.65') FROM DUAL;

Consideraciones:

- Puedes especificar una expresión de tipo BINARY_FLOAT. Sin embargo, no tiene relevancia en hacerlo porque un tipo float solo puede ser interpretado por su presentación interna.
- No es compatible con los datos CLOB directamente. Sin embargo, CLOB se pueden pasar como argumentos a través de la conversión de datos implícita.
- El argumento nlsparam, en esta función tiene el mismo propósito que en la función TO_CHAR(). Además puedes dar el formato (fmtde la mascará haciendo uso de la función TO_CHAR().
- La función NVL() se puede utilizar a partir de Oracle 10g y Oracle 11g.

Publicar un comentario

0 Comentarios