Игнорировать ошибку преобразования
Функция
Игнорирует ошибку преобразования, возвращая нормальный код завершения и NULL-значение.
Спецификация
::=
Общие правила
-
Функция 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|
-
Функция игнорирует код завершения 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|
-
Если значение типа «дата» задано в неправильном формате в виде литерала, то в этом случае ошибка выявляется уже на стадии трансляции запроса и запрос до ядра СУБД не доходит, поэтому функция
nulliferror
не используется.В нижеприведенных примерах генерируется код завершения трансляции 2032 и дело до выполнения запроса (и, соответственно, вызова функции nulliferror) не доходит: insert into test (dat) values (nulliferror('09.15.2001')); insert into test (dat) values (nulliferror('39.05.2001'));
Возвращаемое значение
-
Возвращается
< значимое выражение >
, унаследованное от функций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 Неверный формат преобразования даты