Форум: "Прочее";
Текущий архив: 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