Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Понятие 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.07 MB
Время: 0.103 c
11-1137023812
-=Mike=-
2006-01-12 02:56
2006.10.29
Нужно реализовать следующий функционал для инкрементного поиска


2-1160412563
Степан
2006-10-09 20:49
2006.10.29
И зачем нужна такая оптимизация...


2-1160544905
vigo_
2006-10-11 09:35
2006.10.29
Форма копировать, вставить и пр при нажатии пр. кн. мыши


15-1160116585
Шмель
2006-10-06 10:36
2006.10.29
Выбор монитора


2-1159681993
o_serg
2006-10-01 09:53
2006.10.29
Глюки с Frame





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский