Доступные версии документации

Игнорировать ошибку преобразования

Функция

Игнорирует ошибку преобразования, возвращая нормальный код завершения и NULL-значение.

Спецификация
 
<синтаксис>::=
Общие правила
  1. Функция игнорирует код завершения 1038 («Неверный формат преобразования даты») при выполнении ядром СУБД функций преобразования TO_DATE, TO_CHAR и код завершения 1036 («Значение аргумента в недопустимом диапазоне») при выполнении функций HEXTORAW, LINTER_FILE_INFO, LINTER_PAGE_INFO, LINTER_FILE_SIZE, LINTER_FILE_DEVICE.

    create table tnie(c char(20));
    insert into tnie values ('2000');
    select case nulliferror(to_date(c,'dd.mm.yyyy')) when null then 'null'
    end from tnie;
    |null|
  2. Если значение типа «дата» задано в неправильном формате в виде литерала, то в этом случае ошибка выявляется уже на стадии трансляции запроса и запрос до ядра СУБД не доходит, поэтому функция nulliferror не используется.

    В нижеприведенных примерах генерируется код завершения трансляции 2032 и дело до выполнения запроса (и, соответственно, вызова функции nulliferror) не доходит:
    insert into test (dat) values (nulliferror('09.15.2001'));
    insert into test (dat) values (nulliferror('39.05.2001'));
Возвращаемое значение
  1. Возвращается <значимое выражение>, унаследованное от функций TO_DATE, TO_CHAR, HEXTORAW в случае корректного преобразования, и NULL-значение – в противном случае.

Пример

Практическая польза от функции nulliferror наблюдается в случае выборки записей, некоторые из которых потенциально могут содержать неверные данные. В этом случае процесс выборки записей не прекращается после выборки некорректной записи.

create table test(c char(20));
insert into test values ('01.01.1999');
insert into test values ('2000');
insert into test values ('22.09.2000');

Код завершения 1038 «Неверный формат преобразования даты» игнорируется, выборка данных не прерывается:

select nulliferror(to_date(c,'dd.mm.yyyy')) from test;
|01.01.1999:00:00:00.00|
|                      |
|22.09.2000:00:00:00.00|

Код завершения 1038 «Неверный формат преобразования даты» не игнорируется, выборка данных прекращается после первой некорректной записи.

select to_date(c,'dd.mm.yyyy') from test;
|01.01.1999:00:00:00.00|
INL : состояние выполнения : 1038
Неверный формат преобразования даты 
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter