Knowledge Base

¿Qué es esto?

Oracle: APEX: Validación numérico

24/11/2011 - 18/03/2019 -  Comentarios - Oracle APEX Validaciones

Este código valida que, o bien se trata de un entero de dos cifras o se trata de un decimal con este formato XX,X

DECLARE
     v_Numero VARCHAR2(10);
     v_Part1Numero VARCHAR2(2);
     v_Part2Numero VARCHAR2(1);
     i2 NUMBER;
BEGIN
    FOR i in 1..apex_application.g_f06.count LOOP
         v_Numero := TRIM(APEX_Application.g_f13(i));
         IF (LENGTH(v_Numero) > 4) OR (LENGTH(v_Numero) < 2) OR (LENGTH(v_Numero) = 3) THEN
              RETURN FALSE;
         ELSIF LENGTH(v_Numero) = 4 THEN -- Si es un decimal comprobamos que tiene el formato correcto
             v_Part1Numero := SUBSTR(v_Numero, 1, 2);
             v_Part2Numero := SUBSTR(v_Numero, 4, 1);
            -- Comprobamos que el separador decimal sea una coma
            IF (SUBSTR(v_Numero, 3, 1) <> ',') THEN
                 RETURN FALSE;
            END IF;
            -- Comprobamos que la parte después de la coma del número decimal sea numérica
            IF (ASCII(v_Part2Numero) < 48) OR (ASCII(v_Part2Numero) > 57) THEN
                 RETURN FALSE;
            END IF;
            -- Comprobamos que la parte antes de la coma del número decimal sea numérico
            FOR ia in 1..length(v_Part1Numero) loop
                    IF ((ASCII(SUBSTR(v_Part1Numero,ia,1))<48) OR (ASCII(SUBSTR(v_Numero,ia,1))>57)) THEN
                         RETURN FALSE;
                    END IF;
             END LOOP;
          END IF;
    END LOOP;
    RETURN TRUE;
END;