1. SQL / Говнокод #9720

    −126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    create or replace
    FUNCTION NumberTrue(VAL in varchar2)
       RETURN BOOLEAN IS
          Result varchar2(100);
          i      integer;
          c      char(1);
         V_ReturnValue BOOLEAN;
       BEGIN
          Result:='';
          if not (VAL is NULL) then
             for i in 0..length(VAL) loop
                c:=substr(VAL,i,1);
                if (c>='0') and (c<='9') then V_ReturnValue :=TRUE;  
                 else
                 V_ReturnValue :=FALSE;  
                 GOTO end1;
                 end if;
             end loop;
          end if;
     <<end1>>
          return V_ReturnValue;
       END;

    Проверка числа на валидность в Oracle

    Запостил: nik_lazer, 20 Марта 2012

    Комментарии (4) RSS

    • В смысле, нужно было написать нечто вроде этого? )
      FUNCTION NumberTrue(VAL in varchar2) RETURN BOOLEAN
      IS
      BEGIN
      TO_NUMBER(VAL);
      RETURN TRUE;
      EXCEPTION
      WHEN OTHERS THEN
      RETURN FALSE;
      END;
      З.Ы.: А разве в Oracle есть тип BOOLEAN?
      Ответить
      • TO_NUMBER(VAL); -- такая конструкция запрещена (обязательно нужно возвращаемое значение использовать: присвоить, в IF запихнуть или еще как), плюс ему нужна проверка на целочисленность (для проверки можно заюзать тип INTEGER), и количество знаков до 100 (тип NUMBER и его подтипы(включая INTEGER) ограничены 38 знаками)

        З.Ы.: В PL/SQL есть тип BOOLEAN.
        Ответить
      • И да, привычка отлавливать OTHERS ущербна в корне, в данном случае надо ловить VALUE_ERROR (ORA-06502)
        Ответить
    • регексп поможет...

      RETURN REGEXP_LIKE(VAL, '^\d+$');
      Ответить

    Добавить комментарий