Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 6 7 8 9 10 [11] 12 13 14 15 .. 17   вперед  Ctrl
 Re: Все таки Oracle впереди планеты всей!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67389
Блог
SergSuper
врядли - в MS SQL 4.2 тоже было как сейчас в оракле

Вот на это - очень хотелось бы увидеть достойный уважения пруфлинк....

SergSuper
, но вовремя сумели перейти отсюда и остался атавизм set ansi_null

... потому что судя вот по этому, Вы плохо понимаете, о чём говорите.
8 июл 10, 18:46    [9074406]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
web_fox
Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1.

Но ведь можно и так сказать: к строке '1' дописть ничего, пустоту получится '1'. Ведь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения.
8 июл 10, 19:03    [9074472]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
softwarer
SergSuper
врядли - в MS SQL 4.2 тоже было как сейчас в оракле

Вот на это - очень хотелось бы увидеть достойный уважения пруфлинк....

SergSuper
, но вовремя сумели перейти отсюда и остался атавизм set ansi_null

... потому что судя вот по этому, Вы плохо понимаете, о чём говорите.

ну по 4.2 документации я уже не найду

у меня была уверенность что пустая строка там превращалась в NULL, а сейчас что-то уже засомневался...
может и перепутал, 15 лет прошло всё-таки
8 июл 10, 19:12    [9074511]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3910
SergSuper

отсюда и остался атавизм set ansi_null

Оно не про строки, оно про null != null, null=null...
8 июл 10, 20:06    [9074643]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
vadiminfo
web_fox
Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1.

Но ведь можно и так сказать: к строке '1' дописть ничего, пустоту получится '1'. Ведь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения.


Хм. Я прекрасно понимаю соблазн в ряде случаев приравнять NULL к "". Представим, что мы имеем дело с объектами, как в реальном мире, ибо любое программирование - это моделирование - попытка создать копию обьектов реального мира, имитирующих нтересующие нас свойства. Итак, чтобы обратиться к значению объекта мы обратимся к свойству value:
автор
object.value

а чтобы проверить, что объект существует, мы будем смотреть свойство isNull:
автор
object.isNull

Очевидно, что смешивать два разных свойства объекта по значению - это костыль.
Для Integer: object.value = 0 и object.isNull = true это разные вещи,
аналогично для String: object.value = "" и object.isNull = true это разные вещи.

В оракл чуть-чуть не так. Аля все предметы притягиваются к земле, а вот яблоки - нет. Летают против гравитации. В общих законах, одинаковых для всех объектов, Oracle вводит специальное исключение из правил для всех объектов, где object.Type = "string".

Если object.isNull, а вы пытаетесь прочитать object.value, по правильному должно произойти исключение. Почему по правильному? Опять таки проводим аналогию с реальными объектами - нельзя сесть на стул, если его нет.

Т.е. при программировании абсолютно все объекты должны поддерживать свойство isNull, будь то "трактор", "целое число", "строка" или "яблоко". Проводя аналогию, в оракле есть костылёк (исключение для объектов "строка", удобное для некоторой группы программистов): мы не можем для неинициализированного объекта "трактор" вызвать метод "ехать(вперёд, на 3 км)", но можем для неинициализированного объекта "строка" вызвать метод "приклеить('некая строка')".

Итого:
Костыль. Кому-то удобный. Иногда вылазит боком.
8 июл 10, 21:12    [9074951]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
web_fox
Очевидно, что смешивать два разных свойства объекта по значению - это костыль.

боюсь, что без применения психотропных препаратов будет проблематично добиться такой очевидности.
имхо ваше умение увидеть свойство которого нет прекрасно иллюстрирует фильм ДМБ, когда один из нанюховшихся краски обращается к другому:
- суслика видиш ?
- нет
- и я нет, а он там есть ...
8 июл 10, 21:32    [9075012]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Собственно где это вылазит боком. Да везде, где нужно различать между "пользователь задал значение" или "не задавал" касательно строк. Пример про ввод пароля уже приводили. Либо система бесконечно будет пользователя просить ввести пароль, а он будет вводить пустую строку, либо нужно будет иметь в таблице две колонки: булевую колонку "есть ли пароль" и текстовую "пароль". А там уже как решите, можно просить пользователя вводить пароль (пустую строку - просто нажать энтер), либо пускать сразу.
8 июл 10, 21:33    [9075015]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Yo.!,

чтобы не нюхать краску и не писать чушь про сусликов, прочитайте остальной текст - там объяснение, что все объекты должны вести себя одинаково и одинаково трактовать свойство isNull. Личная просьба: нечего написать по существу - не пишите.
8 июл 10, 21:37    [9075023]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
web_fox
все объекты должны вести себя одинаково и одинаково трактовать свойство isNull.


предположим по каким-то причинам инженер по безопасности не вздернул вас за яйца и в какой-то горе системе действительно существует объект пароль, который может быть не задан и может быть задан как blank password. тогда из вашего утверждения "все объекты должны вести себя одинаково" наш знаменитый суслик обязан иметь состояние "суслика не видно но он там есть", чтоб соответствовать blank password. на мой взгляд без применения психотропных препаратов все таки сложновато добиться от всех объектов одинакового поведения.

Личная просьба: не обижаться в момент когда столь самоуверенно используете "Очевидно"
8 июл 10, 22:01    [9075091]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
Softwarer
web_fox
'' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL.

А она у кого-то выдаёт null? Выбросьте бяку.

Ну судя по коду, приведенному VadimInfo '' при инсерте подменяется на null. Но далее этот null ведет себя как особенный null - типа null_by_emptystring + '1' = '1', а не null?
8 июл 10, 22:04    [9075102]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
web_fox
Yo.!

а вот придумывать предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам.

Заменять отсутствие адреса пустой строкой - плохое проектирование. Здесь согласен.

А я не совсем согласен. Используешь "плохое проектирование" - получи плохой продукт, используешь хорошее - наоборот, не повод серверу принимать за тебя решения, что нужно лишить строковой переменной ее законного значения. Более того, аппетит приходит во время еды - Softwarer согласен, что и ' ' можно заменить на null, а, продолжая эту логику, и @#ять твою м@ть можно было бы автоматом менять на null, если какие-то дураки используют oracle без соответствующих фреймворков, и если бы "слов немного, всего лишь пяток, но какие из них комбинации" легко бы формализовалась как мусор, типа '' или ' ', то хорошему серверу сам бог велел это делать.
8 июл 10, 22:25    [9075157]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
vadiminfo
Что до отношения Оракла к пустым сторкам, то вот из справки.

Oracle Database 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.

Кстати, помимо академического спора, Вам не кажется практичнее прислушаться к таким рекомендациям в плане будущей совместимости?
Ведь разработчик сервера - он такой, скажет "мы частично потеряли совместимость, но были вынуждены это сделать в угоду соответствия стандартам". Будет ли Вам утешением тот факт, что "люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов." - не уверен.
8 июл 10, 22:59    [9075245]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Sgt.Pepper
Кстати, помимо академического спора, Вам не кажется практичнее прислушаться к таким рекомендациям в плане будущей совместимости?
Ведь разработчик сервера - он такой, скажет "мы частично потеряли совместимость, но были вынуждены это сделать в угоду соответствия стандартам". Будет ли Вам утешением тот факт, что "люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов." - не уверен.

Кажется и я:
1) с крайней осторожностью отношусь к NULL, тем более к пустым строкам и избегаю наскока это возможно. Однако, из сооброжений оптимальности NULL таки приходится использовать, но пустые строки в МД не использовал давно. Мож када-то на Аксцессе пытался, но как писал получились полумеры, в общем забил (зато они сами там нарисовываются время от времени).
2) В настоящее время смотрю на Оракловые БД так, что в таблах нет пустых строк, есть только NULL. Просто тупо из-за того, что проверить есть ли в БД '' не удается, значит использовать не могу. А для меня БД нужна тока ради извлечения инфы, а они типа у меня не извлекались пока. Считаю что '' заменяется на NULL в таблах и запросах, потому надеюсь, что и не придет в голову и пытаться использовать (может в коде хранимых процедур, но это типа не считается: код вторичен, поскоку в общем случае в будующем его проще поменять чем структуру и данные).
В силу обоих пунктов в МД у меня пустых строк нет пока, и использовать в голову, надеюсь, не придет. Поэтому все еще надеюсь, что с совместимостью трабл не должно быть. Но продолжаю стараться сохранять бдительность (но не повышенную.)
8 июл 10, 23:51    [9075430]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
vadiminfo
Ведь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения.
Откройте любую книжку по РМД. NULL - это неопределенное значение. Интерпретация NULL как отсутствие значения, т.е. как вполне определенное специальное значение - ИМХО явная ошибка проектирования. И даже если считать допустимым использование NULL как спец. значение (что ИМХО бред), возможная интерпретация его как неопределенности остается в силе.
Именно поэтому конкатенация, как и любая другая операция с NULL значением, должна возвращать NULL. Строка + неизвестно что - это все равно неизвестно что, даже если вместо неизвестно чего м.б. пустая строка (а может и не быть). То же каксается замены вполне определенного пустого значения '' на неопределенный NULL. Так что Оракл допускает явное нарушение не только стандартов, но и реляционной аксиоматики.
ЗЫ. Кстати, в DB2:
values( ' 1' || null );
1                                                                                                                                                   
----------------------------
-                                                                                                                                                   
  1 record(s) selected.
В смысле, тоже NULL.
Так что Oracle в этом плане - единственный извращенец.
9 июл 10, 02:13    [9075608]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
StalkerS
Member

Откуда: Melbourne
Сообщений: 1344
softwarer
(пожимая плечами) Вы не протестуете против того, что тип number представляет только действительные числа и не содержит мнимой части? По сути сервер на ровном месте ограничил Вас в выборе альтернатив.

сервер много в чем ограничивает полет фантазии разработчиков. И одно дело когда он это делает вынужденно и совсем другое дело, когда это происходит ради сомнительных удобств.
softwarer

Ну и плохо. Я уж думал, микрософт не поленился сделать получше.

[/quot]
вот интересный случай, как среда разработки влияет на мирровозрение. Для меня доступ к методам неинициализированного обьекта - это очень грубый баг разработчика. Среда не должна скрывать такие баги, а просто обязана выкидывать исключение.
Дельфи получается тоже таким-же попустительством занимается? эх..
9 июл 10, 04:41    [9075658]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Favn

Откройте любую книжку по РМД. NULL - это неопределенное значение.

Ну открывал некоторые. Во многих про NULL мало что увидел (открыл книгу, увидел фигу в этом смысле).

Favn

Интерпретация NULL как отсутствие значения, т.е. как вполне определенное специальное значение - ИМХО явная ошибка проектирования.

Отсутсвие значения одно из возможных интерпитаций. Ну увы без ошибок не обойтись.
Хорошо. Вот недавний пример про NULL. Я вседа принимаю усилия чтобы их не было, но если другие альтернативы хуже, использую с выгодной для себя интерпритацией этой "неопределенности" (все равно это эло так какая так уж чего теперь разница?).
Есть три таблицм T1, T2, T3 с идентификторами соотвественно id_t1, id_t2, id_t3. Есть две связи 1:1 : T1 <->T2, T1 <->T3. Для реалиции связей я могу мигрироваить id_t1 в T2, T3 и в частных случаях NULL может не появиться. А появится будет интерпретироваться как не известно что там конкретно.
Но есть типа бизнес правило. Если есть связь с T2, то нет с T3 и наоборот. Как это проверять с минимальными затратами?
Я тупо мигрирую id_t2 и id_t3 в T1 и пишу констрейн на значение типа
(id_t2 is not null and id_t3 is null) or (id_t2 is null and id_t3 is not null) 
Т.е. пошел на явное использование null (теперь никаких надежд что null не появится) и интерпритировал null как отсутсвие значения. Было две альтернативы. Из теории РБД мы знаем, что нет критериев оптимальной схемы в общем случае, и проектировщик стоит преред выбором из альтернатив. Ну я его и сделал скрепя сердце.

Favn

И даже если считать допустимым использование NULL как спец. значение (что ИМХО бред), возможная интерпретация его как неопределенности остается в силе.

Ну как мы можем установить бредовое состояние? А про разные возможности интеритации я тоже разделяю.

Favn

Именно поэтому конкатенация, как и любая другая операция с NULL значением, должна возвращать NULL. Строка + неизвестно что - это все равно неизвестно что, даже если вместо неизвестно чего м.б. пустая строка (а может и не быть).

Должна? Про не известно что согласен. Но про ничего нет + что-то = ничего все еще сомневаюсь.
Типа математика допускает разные алгебры, все дело в пользе.

Favn

Так что Оракл допускает явное нарушение не только стандартов, но и реляционной аксиоматики.

Читая книжки про РМД я знаю аксиомы Амстронга (там наличие NULL не предполагается, ну если тока в виде специального определенного значения). Они имеют значение для вывода функциональных зависимостей и польза этого ясна. До других аксиом видать не дочитал. Уточните плиз эти аксиомы, что из них стоящего вывели, чтобы оценить пользу, ну и применть. Я пока не в курсах и считаю NULL вынужденным злом, потому что неопределенности мне не нужны в БД, ввиду их возможности озадачить потребителя информации, и даже сбить с толку в некоторых случаях.

Favn

ЗЫ. Кстати, в DB2:
values( ' 1' || null );
1                                                                                                                                                   
----------------------------
-                                                                                                                                                   
  1 record(s) selected.
В смысле, тоже NULL.
Так что Oracle в этом плане - единственный извращенец.

Не знаю единственный или нет. Ну что если поменяет со времене, возражать не буду.
9 июл 10, 09:10    [9075960]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
Favn
ЗЫ. Кстати, в DB2:
values( ' 1' || null );
1                                                                                                                                                   
----------------------------
-                                                                                                                                                   
  1 record(s) selected.
В смысле, тоже NULL.

Еще один пример в поддержку нула в результате
9 июл 10, 09:14    [9075973]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
В СУБД Caché пустая строка и NULL - это разные значения: NULL and the Empty String
9 июл 10, 09:36    [9076115]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
vadiminfo
Должна? Про не известно что согласен. Но про ничего нет + что-то = ничего все еще сомневаюсь. Типа математика допускает разные алгебры, все дело в пользе.
Ладно, придется с подробностями.
Любой ЯП явно или не очень определяет собственную алгебру. Атомарные операции и их результат являются в ней аксиомами.
То что NULL - именно "неопределенность", а не "пустота" (отсутствие значения), следует уже из результата логических операций над ним. Для числовых типов "нет значения" - это 0, на который именно поэтому делить нельзя :) В смысле, на самом деле можно, но результат - как раз таки неопределенность, от 0 отличающаяся. И "нельзя" именно потому, что понятие "неопределенность" в арифметическую алгебру не входит.
Вряд ли стоить объяснять, что (0 <> '') = false, а (0 <> NULL) = NULL.
Более того, (0 = 0) = true, а (NULL = NULL) = NULL.
То есть NULL - это именно неопределенность, от пустого значения отличающаяся. Так должно быть для всех типов, иначе алгебра получится внутренне противоречивой.
Но раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что
(" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true. То есть тут алгебра для всех типов, кроме строковых, вот тут - алгебра для строковых, а тут вот - рыбу заворачивали. Явная внутренняя противоречивость.
Так как корень этого бардака - в древнем решении хранить '' и NULL одинаково, больше всего все это похоже на сделанную когда-то ошибку проектирования, наследуемую по причине совместимости.
И все бы ничего, тяжкое наследие прошлого давит практически на любую систему программирования, но вот отсутствие опции отключения такого "униКального" поведения, никем больше по очевидным причинам не поддерживаемого - полный бардак и явное неудобство для разработчиков. И выдавать это за достоинство - просто чушь несусветная.
Кстати, круче всего должно быть тем бедолагам, которые мигрируют на Оракл с чего-то еще - искать подобную багу "фичу" можно весьма вдумчиво, не веря своим глазам. Этак недолго и в дурку попасть :)
vadiminfo
Не знаю единственный или нет. Ну что если поменяет со времене, возражать не буду.
А я так в этот светлый миг за Оракл порадуюсь.
ЗЫ. В DB2 NULL до последней версии тоже был строго типизированным, сейчас от этого отказались именно для совместимости с остальными системами. Но такого бардака и там не было, любая операция с NULL операндом, кроме is null, по определению возвращает NULL для любого типа.
9 июл 10, 10:22    [9076492]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Favn
Кстати, круче всего должно быть тем бедолагам, которые мигрируют на Оракл с чего-то еще - искать подобную багу "фичу" можно весьма вдумчиво, не веря своим глазам. Этак недолго и в дурку попасть :)
ну не знаю, у меня проблем не было, во всяком случае пишу не из дурки :)

Favn
... Но такого бардака и там не было, любая операция с NULL операндом, кроме is null, по определению возвращает NULL для любого типа.
давайте не считать свою точку зрения единственно верной
это и к сторонникам оракла относится
9 июл 10, 11:43    [9077381]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Favn
Но раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что
(" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true.

Тут вы ошиблись уже в первом своем выводе, так как в Oracle
('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.
9 июл 10, 12:02    [9077583]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Favn

Любой ЯП явно или не очень определяет собственную алгебру. Атомарные операции и их результат являются в ней аксиомами.

Вроде ни к чему не обязывает. Мало языков, алгебр и аксиом?
Favn

То что NULL - именно "неопределенность", а не "пустота" (отсутствие значения), следует уже из результата логических операций над ним.

Ну, вроде, как операции могли бы следовать из то что такое NULL, к примеру.
В данном случае и насколько я понял везде трехзначная логика. И если NULL - именно "неопределенность", то что тогда именно "пустота"? Вот в четырехзначной может и можно было их разделить. А так получается, что можно говорить не об именно "неопределенность", а об чаще, как правило.
Favn

Для числовых типов "нет значения" - это 0, на который именно поэтому делить нельзя :)

Не. Скорее всего, меньше всего об этом думали, когда решили что деление на 0 луче не определять.
Боюсь, что для числовых типов 0 это есть значение. А нет значения для числовых это либо не известно, либо свойство отсутствует.
Favn

Вряд ли стоить объяснять, что (0 <> '') = false, а (0 <> NULL) = NULL.
Более того, (0 = 0) = true, а (NULL = NULL) = NULL.

Стоит объяснять. Например, в Оракле NULL = NULL – UNKNOWN. И вообще.
Но по любому из этого вроде никак следует, что
Favn

То есть NULL - это именно неопределенность, от пустого значения отличающаяся.


Favn

Но раз в Оракле, как я понял из сказанного, нельзя физически отличить

Ну это как истолковать что я приводил цитату из справки. Но не суть.

Favn


'' от строкового NULL, получается, что
(" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true.

(" <> '') = false или unknown (в справке явно нет, но из того что цитировал из справки моно допустить). Уже ('' <> NULL) = строго unknown и NULL = NULL совсем unknown.

Favn

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

Много выводов, скорее всего не очевидных пока еще.

Favn

Так как корень этого бардака - в древнем решении хранить '' и NULL одинаково, больше всего все это похоже на сделанную когда-то ошибку проектирования, наследуемую по причине совместимости.

Все таки здесь есть, возможно, эмоциональная составляющая. А мы же этого избегаем?
9 июл 10, 13:25    [9078367]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
DPH3
Guest
Хм, с поддержкой стандартов у Oracle вообще довольно плохо.

Как-то пришлось мне делать систему, которая должна была работать на произвольной БД (ODBC, разумеется) - в результате именно с Oracle было больше всего проблем - практически все типы нестандартные и, формально, вообще нельзя сказать, что то, что в Оракле называлось ODBC драйвером - таковым было (не реализован был даже начальный вариант стандарта).

С JDBC примерно тоже - худший из всех драйверов JDBC, который я видел - у Оракла. Начиная с кучи глюков и багов и заканчивая изрядным отходом от стандарта (типа метод по стандарту нужен - но не работает...). Впрочем, пока все java-решения от Оракла, которые я видел - ужасны. Надеюсь, что хоть покупка Сана им поможет, хотя и вряд ли, тут дело, похоже, в головах... :)

Впрочем, я вполне понимаю коммерческий смысл такого подхода - наличие уникальных и неочевидных багов сильно привязывает к платформе и повышает цену специалистов.

(Ох, а уж что я думаю про Оракловский синтаксический анализатор SQL - лучше не в слух. Хотя, вроде бы, в 10ке от самых идиотских багов избавились).
9 июл 10, 13:30    [9078411]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
DPH3
Хм, с поддержкой стандартов у Oracle вообще довольно плохо.

Как-то пришлось мне делать систему, которая должна была работать на произвольной БД (ODBC, разумеется) - в результате именно с Oracle было больше всего проблем - практически все типы нестандартные и, формально, вообще нельзя сказать, что то, что в Оракле называлось ODBC драйвером - таковым было (не реализован был даже начальный вариант стандарта).

С JDBC примерно тоже - худший из всех драйверов JDBC, который я видел - у Оракла. Начиная с кучи глюков и багов и заканчивая изрядным отходом от стандарта (типа метод по стандарту нужен - но не работает...). Впрочем, пока все java-решения от Оракла, которые я видел - ужасны. Надеюсь, что хоть покупка Сана им поможет, хотя и вряд ли, тут дело, похоже, в головах... :)

Впрочем, я вполне понимаю коммерческий смысл такого подхода - наличие уникальных и неочевидных багов сильно привязывает к платформе и повышает цену специалистов.

(Ох, а уж что я думаю про Оракловский синтаксический анализатор SQL - лучше не в слух. Хотя, вроде бы, в 10ке от самых идиотских багов избавились).


А с точки зрения табуретки - все люди на одно лицо :)
Давайте не путать поддержку стандартов Oracle-ом и ODBC-драйверами?
9 июл 10, 13:33    [9078444]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
Bogdanov Andrey
Favn
Но раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что
(" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true.

Тут вы ошиблись уже в первом своем выводе, так как в Oracle
('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.


В oracle костылики и на этот случай есть, например, DECODE работает как (NULL=NULL)=TRUE
9 июл 10, 13:42    [9078544]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 6 7 8 9 10 [11] 12 13 14 15 .. 17   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить