Вхождение в диапазон

NewOraUser
Дата: 23.09.2004 09:45:07
Надо проверить, имеет ли строка значения unlimited, default или является числом. Для этого я написал следующую функцию. Есть ли более изящное решение?

procedure sp_test_range(vcValue IN varchar2)
IS
BEGIN
if upper(vcValue) NOT IN ('UNLIMITED', 'DEFAULT')/* upper(ltrim(rtrim())) <> 'UNLIMITED' or upper(rtrim(ltrim(vcValue))) <> 'DEFAULT' */then
nTestNumber:=to_number(vcValue);
end if;
exception
when invalid_number or value_error then
raise_application_error
(
-20002,
'Value must be DEFAULT, UNLIMITED or number value'
);
when others then
raise;
END;
Elic
Дата: 23.09.2004 10:16:30
1) nTestNumber не объявлена :)
2) допускается NULL
3) числа вида '-1.2266e-89' допустимы?
4) "when others then raise;" - тавтология
NewOraUser
Дата: 23.09.2004 11:06:37
nTestNumber - в другой процедуре. Эта вложена, но это ошибка. Спасибо. Числа должны быть только целые. По поводу raise - а почему?
NewOraUser
Дата: 23.09.2004 11:09:41
Про тавтологию понял. В любом случае другое исключение пройдет. Да?Я просто подумал, что обработчик его съест и дальше не пустит.
Elic
Дата: 23.09.2004 11:25:53
NewOraUser
Числа должны быть только целые.
procedure sp_test_range(vcValue IN varchar2)
is
begin
  if   vcValue is null 
    or upper(vcValue) not in ('UNLIMITED', 'DEFAULT')
    or translate(vcValue, '_1234567890', '_') is not null
  then
    raise_application_error(-20002, 'Value must be DEFAULT, UNLIMITED or number value');
  end if;
end;
Stax
Дата: 23.09.2004 11:55:25
опепятка ?
...
  if   vcValue is null
    or (translate(vcValue, '_1234567890', '_') is not null 
        and upper(vcValue) not in ('UNLIMITED', 'DEFAULT'))
  then
...
Elic
Дата: 23.09.2004 12:06:33
Stax
опепятка ?
:) Если бы. Недодумка! Спасибо за поправку.
NewOraUser
Дата: 23.09.2004 12:37:11
Спасибо. Интересно, а есть ли разница в производительности?