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

C# - на конкатинацию с нулом выдает пустую строку
Java - на конкатинацию с нулом конкатинирует со строкой "null"
php - на конкатинацию с нулом конкатинирует с пустой строкой

т.е. все языки так или иначе выдают строку и только писающий против ветра ANSI SQL ...
9 июл 10, 13:45    [9078583]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
2 Yo.!
C# - на конкатинацию с нулом выдает пустую строку

Правда что-ли?
А мужики то и не знают
Уж кто кто, а C# в этом отношении ведёт себя как говно, простите.
Сложение числа с null'ом даёт null, а конкатенация строки с нуллом даёт исходную строку.

т.е. все языки так или иначе выдают строку

За все то языки не говори.
Вон, VB (который не дотнетовский), "строка" + null даёт в результате null
Там правда есть и другая конкатенация, у которой "строка" & null даёт в результате "строка"
9 июл 10, 14:05    [9078800]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
ЛП

Уж кто кто, а C# в этом отношении ведёт себя как говно, простите.
Сложение числа с null'ом даёт null, а конкатенация строки с нуллом даёт исходную строку.

да, чего-то я уйню спорол, конечно поведение точно такое же как у оракла

ну так где же все таки костыль ?
9 июл 10, 14:15    [9078877]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
Вдогонку
Yo.!
C# - на конкатинацию с нулом выдает пустую строку

Если бы C# вёл себя хотя бы так (выдавал или пустую строку, или как и положено null), то не приходилось бы вылавливать тараканов подобных таким:
Object o = 1;
Object whatTheFuck = o + null;
MessageBox.Show(whatTheFuck);
9 июл 10, 14:18    [9078909]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
ЛП
конкатенация строки с нуллом даёт исходную строку.

а как выглядит пример, демонстрирующий данное поведение?
9 июл 10, 14:25    [9078967]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
Зайцев Фёдор
ЛП
конкатенация строки с нуллом даёт исходную строку.

а как выглядит пример, демонстрирующий данное поведение?

MessageBox.Show("строка" + null);
9 июл 10, 14:28    [9078997]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
ЛП
Зайцев Фёдор
ЛП
конкатенация строки с нуллом даёт исходную строку.

а как выглядит пример, демонстрирующий данное поведение?

MessageBox.Show("строка" + null);

а это ничего, что в случае с целыми числами вы проверяете используется Nullable<>.ToString(), а со строками - нет?
9 июл 10, 14:35    [9079077]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
Зайцев Фёдор
ЛП
Зайцев Фёдор
ЛП
конкатенация строки с нуллом даёт исходную строку.

а как выглядит пример, демонстрирующий данное поведение?

MessageBox.Show("строка" + null);

а это ничего, что в случае с целыми числами вы проверяете используется Nullable<>.ToString(), а со строками - нет?

Нет, ничего. Строка и сама по себе вполне Nullable, использовать нулябельную обёртку нет необходимости.
А как оно вообще к делу относится? По-моему никак.
Число (хоть нулябельное Nullable<Int32>, хоть ненулябельное Int32) плюс нулл даёт нулл
Строка плюс нулл даёт строку.
Что и было написано.
9 июл 10, 14:52    [9079254]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
ЛП

Нет, ничего. Строка и сама по себе вполне Nullable, использовать нулябельную обёртку нет необходимости.
А как оно вообще к делу относится? По-моему никак.
Число (хоть нулябельное Nullable<Int32>, хоть ненулябельное Int32) плюс нулл даёт нулл
Строка плюс нулл даёт строку.
Что и было написано.

не совсем понимаю, почему стандарт ANSI SQL должен быть применим к ссылочным типам.
м.б. их и сравнивать нужно по тем же правилам и результатом ("строка" == null) должно быть null ?
9 июл 10, 15:12    [9079490]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
Зайцев Фёдор
не совсем понимаю, почему стандарт ANSI SQL должен быть применим к ссылочным типам.

Это к Yo вопрос. Он начал сравнивать ANSI SQL и другие языки программирования

м.б. их и сравнивать нужно по тем же правилам и результатом ("строка" == null) должно быть null ?

Кто мешает?
В том же самом VB для определения, нулл чтото или не нулл - была конструкция IsNull(чтото)
Сравнение же с нуллом давало нулл. Как и положено.
9 июл 10, 15:16    [9079521]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Yo.!
вообще интересно как в ANSI SQL было продавлено именно такой бредовый подход к нулам?
Собрались умные люди и сделали единый логичный подход к любому неопределенному значению, вне зависимости от его типа. А Ораклу, как обычно, стандарты побоку, он выше этого. Ему свои баги дороже.
Yo.!
C# - на конкатинацию с нулом выдает пустую строку
Java - на конкатинацию с нулом конкатинирует со строкой "null"
php - на конкатинацию с нулом конкатинирует с пустой строкой
т.е. все языки так или иначе выдают строку и только писающий против ветра ANSI SQL ...
Yo.!
да, чего-то я уйню спорол, конечно поведение точно такое же как у оракла
Да уж, всем уйням - уйня. Какая связь может быть между неназначенной ссылкой (пустым пойнтером) в процедурных ЯП и NULL значением в декларативном SQL? Это совершенно разные механизмы в принципиально разных языках. Или если буковки названия совпадают, и смысл должен быть тем же?
9 июл 10, 15:44    [9079818]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
web_fox
В oracle костылики и на этот случай есть, например, DECODE работает как (NULL=NULL)=TRUE
Я писал про логические операции, а при использовании decode никаких логических операций. И уж в случае с decode такое использование null крайне удобно (и отрицательных сторон я не знаю).
9 июл 10, 15:45    [9079822]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Bogdanov Andrey
Тут вы ошиблись уже в первом своем выводе, так как в Oracle
('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.
Отлично, тут что совой об пенек, что пеньком об сову...
('' = '') д.б. true, а ('' <> '' ) - false, так как это вполне определенные значения (пустые), вполне поддающиеся сравнению на тождественность. Никакой неопределенности, которая есть NULL, при этом не возникает.
То есть, если я Вас правильно понял, '' принимается равной NULL, а строковый NULL равным '' не принимается? Да уж, железная логика...
Кстати, раз '' принимается как NULL, в Оракле в столбец varchar() not null пустые строки заносить нельзя?
Если так, это приведет к еще большей путанице при миграции. Полная жесть.
9 июл 10, 15:54    [9079922]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54818

Favn

Кстати, раз '' принимается как NULL, в Оракле в столбец varchar() not
null пустые строки заносить нельзя?
Если так, это приведет к еще большей путанице при миграции.

Угу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и
тут же побежал снимать not null атрибут со всех строковых полей.

Posted via ActualForum NNTP Server 1.4

9 июл 10, 15:59    [9079977]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Bogdanov Andrey,
Кстати, совсем забыл о конкатенации.
Получается, что в операциях сравнения NULL ведет себя нормально, а '' - как NULL. При этом в конкатенации '' ведет себя как положено, а уже NULL - как ''. Понятно, что хранятся они одинаково, но синтаксически поведение того и другого не симметрично и зависит от контекста.
Да уж, сию могучую логику аршином общим не измерить. В Оракул можно только верить :)
9 июл 10, 16:07    [9080052]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Dimitry Sibiryakov
Угу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и
тут же побежал снимать not null атрибут со всех строковых полей.
Угу, со всех. Включая ключевые
9 июл 10, 16:08    [9080057]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Favn
Получается, что в операциях сравнения NULL ведет себя нормально, а '' - как NULL. При этом в конкатенации '' ведет себя как положено, а уже NULL - как ''. Понятно, что хранятся они одинаково, но синтаксически поведение того и другого не симметрично и зависит от контекста.
Вы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111".
'' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.
9 июл 10, 16:17    [9080132]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
Bogdanov Andrey
'' и null это одно и то же.

Фигасе
А в числовой столбец можно пустую строку записать?
9 июл 10, 16:23    [9080207]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
ЛП
Bogdanov Andrey
'' и null это одно и то же.

Фигасе
А в числовой столбец можно пустую строку записать?
Легко:
SQL> create table a(x number);
Table created.
SQL> insert into a values('');
1 row created.
Ну неужели так трудно понять, что в Oracle нет "пустых строк", есть только null.

Мне кажется, что понимание данного факта не так уж сложно вне зависимости от того соответствует это стандарту или нет, кажется кому-то правильным или нет.
9 июл 10, 16:26    [9080251]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
кокой кошмар
9 июл 10, 16:29    [9080284]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Bogdanov Andrey
Вы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111".
'' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.
Боюсь, что чушь тут пишут, но не я.
Согласен, NULL можно использовать как пустое значение, в качестве специфичного флажка, хотя я лично считаю это ошибкой проектирования. Но никто не спорит с тем, что у NULL есть и другое значение - неопределенность. И это значение - первично, именно как неопределенность в троичную реляционную логику NULL и вводили (это, как я уже писал, прямо следует из логических операций над ним).
А вот '' как неопределенность трактовать ну никак нельзя, это именно пустое значение, что следует уже из операций над строками, например из конкатенации. Ну попробуйте к строке 'ABC' добавить неизвестную сейчас строку. Что логичнее получить - ту же 'ABC', или неизвестную строку, хоть и с 'ABC...' начинающуюся?
Вы говорите, '' и NULL в Оракле тождественны. Получается, что во всех типах NULL может означать или неопределенность, или пустое значение. Кроме строкового. В строковом - именно неопределенность в операциях логических и именно пустое значение в операциях строковых. Т.е. трактовка и '', и NULL не определяется проектировщиком БД, а тупо зависит от контекста применения этих синтаксически разных, но почему-то одинаковых по смыслу в Оракле выражений. Причем в разных контекстах - разный смысл. Что, на мой взляд, предельно нелогично.

ЗЫ. Возможно, Вы тут обсуждаете Оракл. А я тут пытаюсь говорить о смысле конструкции NULL в РСУБД вообще и ошбочном ее трактовании в Оракле.
9 июл 10, 16:39    [9080386]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Bogdanov Andrey
Ну неужели так трудно понять, что в Oracle нет "пустых строк", есть только null.
Мне кажется, что понимание данного факта не так уж сложно вне зависимости от того соответствует это стандарту или нет, кажется кому-то правильным или нет.
Ничего подобного. Факты говорят, что в синтаксисе SQL, в т.ч. Оракла, есть '' и есть NULL - две разные лексемы с синтаксически разными свойствами. Они же говорят, что в Оракле NULL и '' хранятся одинаково, откуда и пртиворечие.
При этом эта единая сущность для строк ведет себя как NULL в логике и как '' в строковых операциях.
Более того, получается, что в Оракле столбец с возможными пустыми строками даже не может входить в составной ключ, что уже совсем бардак и несовместимость с остальным миром РСУБД.
И эти факты ну никак не могут быть правильной реализацией NULL и '', вне зависимости от того, нравится кому-то Оракл или нет.
Лично мне он скорее нравится, но вот такие закидоны...
9 июл 10, 16:48    [9080499]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Favn
Боюсь, что чушь тут пишут, но не я.
На надо обижаться. Вы, говоря именно об Oracle, пытались сравнивать поведение пустой строки и null, я вам объясняю, что это - бессмысленно, так как в Oracle это два названия одной и той же величины.

Favn
Согласен, NULL можно использовать
То как использовать величину, обозначемую, как null сильно зависит от свойств этой величины. В Oracle и DB2 свойства величин, обозначаемых, как null - разные, а значит и использовать их можно по-разному.
И ошибкой проектрования будет не учитывать свойства используемой величины.

Favn
Получается, что во всех типах NULL может означать или неопределенность, или пустое значение.
Ну это вообще что-то мне непонятное. null всегда обозначает величину, обладающую описанными в документации свойствами. Никаких неопределенностей или пустот он не обозначает. Все это просто некоторые наглядные объяснения, помогающие запомнить свойства величины.
9 июл 10, 16:56    [9080605]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Favn
Bogdanov Andrey
Вы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111".
'' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.
Боюсь, что чушь тут пишут, но не я.
Согласен, NULL можно использовать как пустое значение, в качестве специфичного флажка, хотя я лично считаю это ошибкой проектирования. Но никто не спорит с тем, что у NULL есть и другое значение - неопределенность. И это значение - первично, именно как неопределенность в троичную реляционную логику NULL и вводили (это, как я уже писал, прямо следует из логических операций над ним).
А вот '' как неопределенность трактовать ну никак нельзя, это именно пустое значение, что следует уже из операций над строками, например из конкатенации. Ну попробуйте к строке 'ABC' добавить неизвестную сейчас строку. Что логичнее получить - ту же 'ABC', или неизвестную строку, хоть и с 'ABC...' начинающуюся?
Вы тут можете сколько угодно теоретизировать, но по сути NULL - это дополнительный бит информации. В оракле для строк его не ввели. Вероятно посчитав что пустая строка и так довольно красноречива. Вот и вся разница.
9 июл 10, 17:00    [9080648]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Favn
Факты говорят, что в синтаксисе SQL, в т.ч. Оракла, есть '' и есть NULL - две разные лексемы с синтаксически разными свойствами.
Да, лексемы две, но свойства у них одинаковые. В чем противоречие?
9 июл 10, 17:03    [9080670]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 7 8 9 10 11 [12] 13 14 15 16 17   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить