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;