Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NULL, IN and boolean expressions / 6 сообщений из 6, страница 1 из 1
26.05.2003, 01:13:15
    #32168163
vskv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL, IN and boolean expressions
Почитал /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
26.05.2003, 01:48:38
    #32168168
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL, IN and boolean expressions
>почему пустая строка считается 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
26.05.2003, 12:11:34
    #32168391
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL, IN and boolean expressions
а не UNKNOWN ?
...
Рейтинг: 0 / 0
26.05.2003, 13:07:55
    #32168456
KonstN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL, IN and boolean expressions
2 Ося
SY опечатался - он хотел сказать, что TRUE OR UNK = TRUE
Конечно, AND даст UNK.
Но в исходном вопросе ветки стоит OR, так что
cl_name = 'aaa' OR cl_name IS NULL => TRUE при cl_name is NULL
...
Рейтинг: 0 / 0
26.05.2003, 23:13:44
    #32169055
vskv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL, IN and boolean expressions
2 SY: Thanx

Этот ответ тоже бы в FAQ, а то всегда утверждается, что результат сравнения с NULL тоже будет NULL.
А оказывается, есть два исключения: FALSE AND NULL => FALSE и TRUE OR NULL => TRUE
...
Рейтинг: 0 / 0
26.05.2003, 23:31:43
    #32169062
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL, IN and boolean expressions
>Этот ответ тоже бы в 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / NULL, IN and boolean expressions / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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