powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NULL, IN and boolean expressions
6 сообщений из 6, страница 1 из 1
NULL, IN and boolean expressions
    #32168163
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал /topic/33169 и в очередной раз понял, что две вещи в Оракуле мне не понять:\r
почему пустая строка считается NULL (вплоть до того, что NVL(cl_name,\'\') тоже является NULL со всеми вытекающими оттуда последствиями)\r

и как пропагандируется результат нечаянного сравнения с NULL в логических выражениях -- то есть, чему будет равен результат (cl_name = \'aaa\' OR cl_name IS NULL). По логике честной пропаганды , если cl_name IS NULL, то левая часть будет UNKNOWN, правая -- TRUE, и результат тоже вроде бы должен быть UNKNOWN. Но ведь работает...
...
Рейтинг: 0 / 0
NULL, IN and boolean expressions
    #32168168
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>почему пустая строка считается NULL (вплоть до того, что NVL(cl_name,'')
>тоже является NULL со всеми вытекающими оттуда последствиями)

This is one of Oracle's biggest problems. Oracle has no means to differentiate between NULL and empty string. In every Oracle release you will find a note "Oracle currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls".

>как пропагандируется результат нечаянного сравнения с NULL в логических
>выражениях -- то есть, чему будет равен результат (cl_name = 'aaa' OR
>cl_name IS NULL). По логике честной пропаганды, если cl_name IS NULL, то
>левая часть будет UNKNOWN, правая -- TRUE, и результат тоже вроде бы
>должен быть UNKNOWN. Но ведь работает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
NOT Operator 
Table  3 - 6  shows the result of applying the NOT operator to a condition. 
Table  3 - 6  NOT Truth Table 
 	TRUE 	FALSE 	UNKNOWN 	
 	 -------------------------------	
 
NOT 	FALSE 	TRUE 	UNKNOWN 	

	
AND Operator 
Table  3 - 7  shows the results of combining two expressions with AND. 
Table  3 - 7  AND Truth Table 
 -----------------------------------------
 
AND 	TRUE 	FALSE 	UNKNOWN 	
 -----------------------------------------
 
TRUE 	TRUE 	FALSE 	UNKNOWN 	
 -----------------------------------------
 
FALSE 	FALSE 	FALSE 	FALSE 	
 -----------------------------------------
 
UNKNOWN 	UNKNOWN 	FALSE 	UNKNOWN 	
 -----------------------------------------
 

	
OR Operator 
Table  3 - 8  shows the results of combining two expressions with OR. 
Table  3 - 8  OR Truth Table 
 -----------------------------------------
 
OR 	TRUE 	FALSE 	UNKNOWN 	
 -----------------------------------------
 
TRUE 	TRUE 	TRUE 	TRUE 	
 -----------------------------------------
 
FALSE 	TRUE 	FALSE 	UNKNOWN 	
 -----------------------------------------
 
UNKNOWN 	TRUE 	UNKNOWN 	UNKNOWN
 -----------------------------------------
 


As you can see UNKNOWN AND TRUE = TRUE.

SY
...
Рейтинг: 0 / 0
NULL, IN and boolean expressions
    #32168391
Фотография Ося
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а не UNKNOWN ?
...
Рейтинг: 0 / 0
NULL, IN and boolean expressions
    #32168456
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ося
SY опечатался - он хотел сказать, что TRUE OR UNK = TRUE
Конечно, AND даст UNK.
Но в исходном вопросе ветки стоит OR, так что
cl_name = 'aaa' OR cl_name IS NULL => TRUE при cl_name is NULL
...
Рейтинг: 0 / 0
NULL, IN and boolean expressions
    #32169055
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY: Thanx

Этот ответ тоже бы в FAQ, а то всегда утверждается, что результат сравнения с NULL тоже будет NULL.
А оказывается, есть два исключения: FALSE AND NULL => FALSE и TRUE OR NULL => TRUE
...
Рейтинг: 0 / 0
NULL, IN and boolean expressions
    #32169062
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Этот ответ тоже бы в FAQ, а то всегда утверждается, что результат сравнения с NULL тоже будет NULL.
>А оказывается, есть два исключения: FALSE AND NULL => FALSE и TRUE OR NULL => TRUE

I think you are confusing comparison operation with logical operation. Expression

cl_name = 'aaa' OR cl_name IS NULL

has two comparison operations and a logical operatyion between comparisson results. Comparing with NULL always results in NULL unless you are using IS [NOT] NULL. Logical operation OR is always TRUE if one of the operands is TRUE since all you care is at least one of the operands is TRUE. Therefore it does not matter if other operand is FALSE, NULL or TRUE. Same way AND results in FALSE if one of the operands is FALSE since AND assumes all operands to be TRUE. Therefore it does not matter if other operand is FALSE, NULL or TRUE.

SY.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NULL, IN and boolean expressions
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]