Проверка правильности даты в параметре оракула - PullRequest
2 голосов
/ 09 июня 2009

Oracle 8 здесь.

При передаче даты в процедуру я могу передать '', и ничего не выбрасывается.

Тестирование на MYDATE := '' не соответствует истине. Также не LENGTH < 1. DBMS_OUTPUT ничего не показывает через параметр.

Попытка передать '01-30-2009' (instead of 30-JAN-2009) выдает неверную ошибку даты.

Как допустима передача строки нулевой длины?

Как проверить правильность даты?

Ответы [ 2 ]

5 голосов
/ 09 июня 2009

В более поздних версиях Oracle пустая строка считается такой же, как NULL. Это, вероятно, то, что вы сталкиваетесь.

Возможно, вы сможете установить значение параметра не равным NULL, и тогда оно должно привести к ошибке. (Как отметил Джеффри Кемп в комментариях, вы НЕ можете использовать не нуль для параметра)

Что касается ошибки с недопустимой датой, Oracle будет неявно приводить строку к дате, если она имеет формат dd-mmm-yyyy. В противном случае вам придется запустить его до to_date с соответствующей маской.

Я не знаком с Oracle 8, поэтому я не уверен, что нового или нет. Надеюсь, это поможет.

2 голосов
/ 09 июня 2009

Лично я думаю, что дата - это дата, а строка - это строка. Хотелось бы, чтобы был способ отключить неявное преобразование. Но если вы управляете программой, которая вызывает процедуру, вы можете попробовать:

call my_proc(to_date('01-30-2009','MM-DD-YYYY'));

вместо:

call my_proc('01-30-2009');

В противном случае, заставьте вашу процедуру получить строку и проверьте формат внутри процедуры:

create procedure my_proc(p_date_str in varchar2) is
  v_dt date;

begin
  if length(v_dt) != 10 then
    raise_application_error(-20000,'Wrong date format',true);
  end if;
  v_dt := to_date(p_date_str,'MM-DD-YYYY');
  ... now use v_dt as a date ...
end;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...