Как Oracle 10g оценивает NULL в логических выражениях - PullRequest
3 голосов
/ 22 апреля 2010
if not (i_ReLaunch = 1 and (dt_enddate is not null))

Как это выражение будет оцениваться в Oracle 10g когда входное значение i_ReLaunch = null и значение dt_enddate не равно нулю это входит в цикл. По нормам в нормальном c # и все это не должно входить в цикл как со значениями это будет следующим образом.

If( not(false and (true)) = if not( false) =if( true) что означает, что он должен войти в цикл

Но этого не происходит

Может кто-нибудь сообщить мне, если я ошибаюсь в любом месте

1 Ответ

3 голосов
/ 22 апреля 2010

Логические операции со значением NULL в Oracle возвращают UNKNOWN - не истина или ложь. Итак, у вас есть что-то вроде этого:

If( not(UNKNOWN and (true)) = if not( UNKNOWN) =if( UNKNOWN )

В этом случае IF будет рассматривать НЕИЗВЕСТНО как ложное.

Если i_relaunch может быть нулевым, вам нужно использовать некоторые из функций обработки NULL (NVL, NVL2, NULLIF, COALESCE, LNNVL), чтобы убедиться, что вы получите правильный результат.

См. Эту статью для получения дополнительной информации:

...