Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Понятие NULL   Найти похожие ветки 

 
kaif ©   (2006-10-02 15:03) [240]

2 Reindeer Moss Eater ©   (02.10.06 14:58) [238]

Я готов легко примириться с тем, что ORACLE считает пустую строку за NULL. Если он в выражении WHERE это понимает именно так.

Но меня смущает то, что он допускает при этом конкатенацию таких строк.
Это уже - совершенно вольное обращение с таким понятием.

А если я решу в выражении WHERE употребить конкатенацию, не приду ли я к очевидным противоречиям?


 
evvcom ©   (2006-10-02 15:04) [241]

> [237] kaif ©   (02.10.06 14:55)
> Ведь для пользователя, который легко может делать конкатенации
> таких пустых строк будет очень странным, что при запросе
> с
> WHERE T1.F = T2.F and T1.I = T2.I and T1.O = T2.O
> почему-то (????) выпали все американцы.

Ну так условие составлено без учета того, как Оракл разруливает данную ситуацию.
WHERE T1.F = T2.F and T1.I = T2.I and decode(T1.O, T2.O, 1, 0) = 1


 
Тугодум ©   (2006-10-02 15:04) [242]

Reindeer Moss Eater

То есть правомерно ли было считать, что она является олицетворением значения null для строкового типа.

Нет, не правомерно.

И всё же... Чем больше я думаю о подходе Oracle, тем больше он мне нравится. И по скорости работы, и по удобству конкатенации. Теперь я им в вину вменяю только один, впрочем очень страшный грех - они не смогли изменить стандарт. Надеюсь, какой-нибудь SQL-2008 будет включать эту фичу :)


 
Reindeer Moss Eater ©   (2006-10-02 15:05) [243]

Кстати, кайф, что Вы запишете в таблицу IB в поле отчество у Леннона?
Пустую строку или нулл?
По идее пустую строку.

А что она означает?
Только то, что у Леннона нет отчества.
Нет такой категории в его паспортных данных вообще.
Про его отчетсво нельзя ничего сказать определенного кроме того, что его нет.

Нельзя даже говорить про его нулевую длину, так как тогда получится что у
Жюля Верна и Леннона одинаковые по длине и содержанию отчества!

Вывод: пустая строка даже в ИБ - это (только логически) экавивалентна понятию (не значению типа данных, а понятию) NULL


 
Тугодум ©   (2006-10-02 15:07) [244]

WHERE T1.F = T2.F and T1.I = T2.I and decode(T1.O, T2.O, 1, 0) = 1

Или даже так:
WHERE T1.F||T1.I||T1.O||"X"=T2.F||T2.I||T2.O||"X"


 
kaif ©   (2006-10-02 15:08) [245]

SELECT T1.F||T1.I||T1.O, T2.F||T2.I||T2.O
FROM
 T1,T2
WHERE
 T1.F||T1.I||T1.O = T2.F||T2.I||T2.O

Что вернет?


 
Reindeer Moss Eater ©   (2006-10-02 15:11) [246]

Что вернет?
Это не важно!
:)

Ну все же!
Имеют ли одинаковые отчества Джон Леннон и Жюль Верн в мире смоделированном на IB?


 
evvcom ©   (2006-10-02 15:11) [247]

> [239] kaif ©   (02.10.06 15:00)

Только что проверил. Оракл убрал из рассмотрения null строки. Я задал 2 строки: 2 символа и null, получил в ответе 2. Это укладывается в твои ожидания?


 
euru ©   (2006-10-02 15:12) [248]


> evvcom ©   (02.10.06 14:49) [235]
> Сумма денег в Оракле имеет тип number. :)

1. Прошу подтвердить это ссылкой на документацию. А также прошу предоставить мне ссылку, запрещающую хранить сумму прописью в символьном поле.
2. Ну, если считать, что в руководстве (бухгалтерии) не ошибаются, а отсутствие конверта эквивалентно отсутствию денег в конверте, то, конечно, можно смело считать, что работал, но ничего не заработал.

Три раза :)


 
evvcom ©   (2006-10-02 15:14) [249]

> [244] Тугодум ©   (02.10.06 15:07)

Так нельзя.


 
Тугодум ©   (2006-10-02 15:16) [250]

evvcom ©   (02.10.06 15:14) [249]

А почему? Синтаксическая ошибка?


 
evvcom ©   (2006-10-02 15:18) [251]

> [248] euru ©   (02.10.06 15:12)

1. Тогда можно хранить "ничего не заработал!" :)
2. Да нафиг надо на конверт тратиться? :)


 
kaif ©   (2006-10-02 15:21) [252]

Reindeer Moss Eater ©   (02.10.06 15:05) [243]
Кстати, кайф, что Вы запишете в таблицу IB в поле отчество у Леннона?
Пустую строку или нулл?
По идее пустую строку.


Я запишу в IB null. То есть данных по отчеству - нет.
В ORCALE запишу null. То есть то же самое.

Но в ORACLE  я смогу делать конкатенацию, а IB мне придется применить какой-нибудь CASE для этой ситуации.

Однако допустим я обязательно хочу сделать поле "Отчество" в IB NOT NULL.
Тогда я запишу в него пустую строку для такой реализации.

У меня есть оба варианта реализации. Я свободен в выборе.

А в ORACLE что я буду делать?
Ставить пробел?
И уповать на то, что другие ораклисты меня простят, зная об этой проблеме?
Вы не чувствуете, что то, что Вам представлется хорошим решением, для меня представляется лишь новой проблемой?

Заметьте, я вовсе не гоню на ORACLE.
Мне нравится этот сервер.
Вот ели бы еще оставили на мое усмотрение, отождествлять пустые строки с NULL или нет - я бы не возражал. В IB этот выбор за мной имеется, а в ORACLE я его почему-то лишен.

А любой недостаток всегда можно выдать за преимущество.

Председатель колхоза заходит на собрание, бросает кепку и говорит:
- Ну все! Одной проблемой меньше!...
- Что, корма завезли?...
- Нет, стоять перестал...


 
Reindeer Moss Eater ©   (2006-10-02 15:22) [253]

Тугодум ©   (02.10.06 15:04) [242]
Reindeer Moss Eater

То есть правомерно ли было считать, что она является олицетворением значения null для строкового типа.

Нет, не правомерно.


Ага. Точно точно!
Учение Маркса всесильно, потому что у него такое же отчество как и у  Энгельса. (В мире IB)


 
evvcom ©   (2006-10-02 15:23) [254]

> [250] Тугодум ©   (02.10.06 15:16)

Потому что:
1. Наверняка ПО будем писать так, чтобы при сравнении не учитывать регистр, т.к. будем считать, что "Иванов Иван Иванович" = "ИВАНОВ ИВАН ИВАНОВИЧ".
2. Кроме отчества может быть неизвестным и имя.
3. Тогда по твоему условию точно окажется, что Upper("Иванов" || "А") = Upper("Иванова" || null)


 
Reindeer Moss Eater ©   (2006-10-02 15:24) [255]

Я запишу в IB null. То есть данных по отчеству - нет.
В ORCALE запишу null. То есть то же самое.


Это как же так?
Раньше мне говорили, что в IB пишут пустую строку когда отчества нет и не может быть, а null когда оно есть но не определно или неизвестно.


 
Тугодум ©   (2006-10-02 15:24) [256]

Reindeer Moss Eater ©   (02.10.06 15:22) [253]

Мы это уже обсуждали, давайте не будем повторяться. Ваша точка зрения понята мною в достаточной мере.


 
Reindeer Moss Eater ©   (2006-10-02 15:25) [257]

Тугодум ©

Я все надеюсь агрументы услышать. Почему это неправомерно.


 
Тугодум ©   (2006-10-02 15:27) [258]

Reindeer Moss Eater ©   (02.10.06 15:25) [257]

Потому что Length("")=0, а не NULL. Можете в Delphi проверить.


 
Reindeer Moss Eater ©   (2006-10-02 15:29) [259]

да мы тут все больше не про языки а про сущности.


 
Игорь Шевченко ©   (2006-10-02 15:29) [260]

Тугодум ©   (02.10.06 15:27) [258]

В Delphi появилось понятие NULL ?


 
Тугодум ©   (2006-10-02 15:30) [261]

evvcom ©   (02.10.06 15:23) [254]

А я буду в конец фамилии пробел добавлять. И в конец имени - тоже. И пускай мне Oracle попробует сказать, что это противоречит каким-либо стандартам...


 
Reindeer Moss Eater ©   (2006-10-02 15:30) [262]

Потому что Length("")=0, а не NULL. Можете в Delphi проверить.

Проверил. Получил парадокс одинаковых отчеств.


 
Тугодум ©   (2006-10-02 15:31) [263]

Reindeer Moss Eater ©   (02.10.06 15:30) [262]

Вы о чем? Прошу не забывать, с кем разговариваете :)


 
Тугодум ©   (2006-10-02 15:33) [264]

Игорь Шевченко ©   (02.10.06 15:29) [260]

Повторяю. В Delphi Length("")=0, а не NULL.


 
pasha_golub ©   (2006-10-02 15:33) [265]


> Reindeer Moss Eater ©   (02.10.06 15:25) [257]

Вернемся к числам.

Какое из целых чисел примем за олицетворение NULL? 0 или 1? Напоминаю, что умножив любое число на 1, получаем тоже число. Однако, прибавив к любому числу 0, получаем тоже число.


 
evvcom ©   (2006-10-02 15:35) [266]

> [261] Тугодум ©   (02.10.06 15:30)

Смайлик ты не поставил, потому решаю, что ты на полном серьезе. Дописал ты пробел к Ф, И, О. Потом решил подредактировать запись. Автоматом добавил еще по пробелу. И т.д. Искать на свою з... приключения - норма жизни?


 
evvcom ©   (2006-10-02 15:36) [267]

> [264] Тугодум ©   (02.10.06 15:33)

Не гони. А что же еще могло быть в Delphi?


 
euru ©   (2006-10-02 15:36) [268]


> evvcom ©   (02.10.06 15:18) [251]
> 1. Тогда можно хранить "ничего не заработал!" :)
Дык, а если человек заработал "Сто тыщ миллионов", а ему просто забыли конверт отдать? Как он должен реагировать?
Ну и, перефразируя Reindeer Moss Eater:
Кстати, а как пощупать сумму "ничего не заработал!"?


> 2. Да нафиг надо на конверт тратиться?:)
Вот и в руководстве так подумали: "А нафига нам на конверты тратиться?" И перестали выдавать конверты с зарплатой.
А сотрудники тоже сообразительные: "Конверты не дали, значит, мы ничего не заработали." И продолжили безвозмездно работать.

:)


 
ANB ©   (2006-10-02 15:37) [269]


>
> Повторяю. В Delphi Length("")=0, а не NULL.

Гы. самый прикол, что в оракле - тоже.


 
Игорь Шевченко ©   (2006-10-02 15:37) [270]

Тугодум ©   (02.10.06 15:33) [264]

И Length("")="RULEZZ" тоже в delphi не срабатывает. Отчего бы ?


 
pasha_golub ©   (2006-10-02 15:37) [271]

NULL можно также рассматривать как признак того, что значение не из множества разрешенных. Однако пустая строка входит в множество строк.


 
Тугодум ©   (2006-10-02 15:40) [272]

evvcom ©   (02.10.06 15:35) [266]

А у меня триггер пробелы добавляет. А получаю данные для редактирования и отображения из view, где конечные пробелы удаляются. То есть с пробельными значениями работает только сервер БД.


 
Тугодум ©   (2006-10-02 15:40) [273]

evvcom ©   (02.10.06 15:36) [267]

Попробуй на 0 разделить и узнаешь, кто из нас гонит.


 
Тугодум ©   (2006-10-02 15:42) [274]

ANB ©   (02.10.06 15:37) [269]

Я тут одну статью в пятницу приводил, в которой написано, что Length("")=NULL. Или это от версии Oracle зависит?


 
evvcom ©   (2006-10-02 15:43) [275]

> [268] euru ©   (02.10.06 15:36)
> Дык, а если человек заработал "Сто тыщ миллионов", а ему
> просто забыли конверт отдать?

Ну в любом случае человека сей факт возмутит, даже если ему принесут пустой конверт (а вдруг туда забыли денег положить?) Он пойдет в бухгалтерию.

> Кстати, а как пощупать сумму "ничего не заработал!"?

Сунь руку в пустой карман и пощупай :-)


 
Reindeer Moss Eater ©   (2006-10-02 15:43) [276]

Какое из целых чисел примем за олицетворение NULL? 0 или 1? Напоминаю, что умножив любое число на 1, получаем тоже число. Однако, прибавив к любому числу 0, получаем тоже число.

Никакое!
И это я говорил с самого начала.
Люое значение number в доступном диапазоне не являтся эквивалентом NULL. В силу того, что любое значение длиннее нуля байт.
Строковый тип в силу своей природы (произвольной длины которая может быть равна нулю) имеет такой аналог внутри своего диапазона.
И Оракл для нула не стал придумывать еще одно значение.


 
Reindeer Moss Eater ©   (2006-10-02 15:46) [277]

>Кстати, а как пощупать сумму "ничего не заработал!"?

Это подвопрос главного вопроса: насколько вырос мой баланс.


 
evvcom ©   (2006-10-02 15:47) [278]

> [269] ANB ©   (02.10.06 15:37)

Ни фига select length("") from dual дал null

> [272] Тугодум ©   (02.10.06 15:40)

А у меня такого гимора нет.

> [273] Тугодум ©   (02.10.06 15:40)

Ты это о чем? Где в [264], [267] деление на ноль?


 
kaif ©   (2006-10-02 15:47) [279]

Reindeer Moss Eater ©   (02.10.06 15:24) [255]
Я запишу в IB null. То есть данных по отчеству - нет.
В ORCALE запишу null. То есть то же самое.

Это как же так?
Раньше мне говорили, что в IB пишут пустую строку когда отчества нет и не может быть, а null когда оно есть но не определно или неизвестно.


Вы спросили "Как я поступлю" в отношении отчеств.
Я ответил.
Если я в этом случае поступлю как-то, из этого еще не следует, что так правильно поступать всегда.
А у Вас именно это следует.

Я допускаю такую задачу, где я поступлю в отношении тех же отчеств иначе. Например, если я делаю базу данных сотрудников - я поступлю, как написал. Но если бы я делал базу данных для посольства, я бы сделал в соотвествии со стандартом SQL. Пустыми строками я бы обозначил именно отсутствие отчества. А при помощи null - отсутствие данных.


 
Тугодум ©   (2006-10-02 15:47) [280]

Reindeer Moss Eater ©   (02.10.06 15:43) [276]

Я не вижу принципиальных различий между строками и числами.
Строка abcd состоит из 4 символов и помещается в Char(4), число 1234 тоже состоит из 4 символов и помещается в Dec(4). И у строки, и у числа есть длина. Давайте обозначать "" пустое число, то есть число из 0 десятичных разрядов. Будет ли такое число аналогом NULL? Если будет, то почему его не используют в СУБД? Отвечаю: нет, не будет, потому что
15 + NULL = NULL, а 15 + "" = 15.



Страницы: 1 2 3 4 5 6 7 8 9 
10 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 1.09 MB
Время: 0.069 c
3-1157004192
MrKiLLER
2006-08-31 10:03
2006.10.29
Помогите разобрать ТЗ на программу SQLNavigator


2-1160653889
Alex_C
2006-10-12 15:51
2006.10.29
TMemo и DoubleBuffered проблема


15-1160486530
БорецСоСпамом
2006-10-10 17:22
2006.10.29
Спам - Зло


15-1160536008
Slider007
2006-10-11 07:06
2006.10.29
С днем рождения ! 11 октября


11-1136150719
Arberes
2006-01-02 00:25
2006.10.29
Ошибки....