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

Функция

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

Спецификация
 
< синтаксис >::=
Общие правила
  1. Функция NULLIFERROR игнорирует различные ошибки преобразования типов (1030-1033, 1040-1042).

    Примечание

    Игнорирование ошибок преобразования типов (1030-1033, 1040-1042) поддерживается со сборки 6.0.17.92.

    create table tonum (c char(20));
    insert into tonum values ('200');
    insert into tonum values ('text');
    
    select to_number(c) from tonum;
    |                   200|
    INL : execute status : 1042
    character string to float conversion error                    
    
    select nulliferror(to_number(c)) from tonum;
    |                   200|
    |                      |
    
    select nvl(nulliferror(to_number(c)),0) from tonum;
    |                   200|
    |                     0|
  2. Функция игнорирует код завершения 1036 («Значение аргумента в недопустимом диапазоне») при выполнении функций HEXTORAW, LINTER_FILE_INFO, LINTER_PAGE_INFO, LINTER_FILE_SIZE, LINTER_FILE_DEVICE и код завершения 1038 («Неверный формат преобразования даты») при выполнении ядром СУБД функций преобразования TO_DATE, TO_CHAR.

    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|
  3. Если значение типа «дата» задано в неправильном формате в виде литерала, то в этом случае ошибка выявляется уже на стадии трансляции запроса и запрос до ядра СУБД не доходит, поэтому функция 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
Неверный формат преобразования даты