mysql_real_escape_string / Говнокод #9720 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 nik_lazer, (Updated )

Комментарии (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)
      Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8