powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Все таки Oracle впереди планеты всей!
25 сообщений из 419, страница 12 из 17
Все таки Oracle впереди планеты всей!
    #36732577
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще интересно как в ANSI SQL было продавлено именно такой бредовый подход к нулам ?

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

т.е. все языки так или иначе выдают строку и только писающий против ветра ANSI SQL ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732647
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yo.!
C# - на конкатинацию с нулом выдает пустую строку
Правда что-ли?
А мужики то и не знают
Уж кто кто, а C# в этом отношении ведёт себя как говно, простите.
Сложение числа с null'ом даёт null, а конкатенация строки с нуллом даёт исходную строку.

т.е. все языки так или иначе выдают строку
За все то языки не говори.
Вон, VB (который не дотнетовский), "строка" + null даёт в результате null
Там правда есть и другая конкатенация, у которой "строка" & null даёт в результате "строка"
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732672
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛП
Уж кто кто, а C# в этом отношении ведёт себя как говно, простите.
Сложение числа с null'ом даёт null, а конкатенация строки с нуллом даёт исходную строку.

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

ну так где же все таки костыль ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732681
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку
Yo.!C# - на конкатинацию с нулом выдает пустую строку
Если бы C# вёл себя хотя бы так (выдавал или пустую строку, или как и положено null), то не приходилось бы вылавливать тараканов подобных таким:
Код: plaintext
1.
2.
Object o = 1;
Object whatTheFuck = o + null;
MessageBox.Show(whatTheFuck);
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732695
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПконкатенация строки с нуллом даёт исходную строку.
а как выглядит пример, демонстрирующий данное поведение?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732704
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорЛПконкатенация строки с нуллом даёт исходную строку.
а как выглядит пример, демонстрирующий данное поведение?
MessageBox.Show("строка" + null);
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732726
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПЗайцев ФёдорЛПконкатенация строки с нуллом даёт исходную строку.
а как выглядит пример, демонстрирующий данное поведение?
MessageBox.Show("строка" + null);
а это ничего, что в случае с целыми числами вы проверяете используется Nullable<>.ToString(), а со строками - нет?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732768
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорЛПЗайцев ФёдорЛПконкатенация строки с нуллом даёт исходную строку.
а как выглядит пример, демонстрирующий данное поведение?
MessageBox.Show("строка" + null);
а это ничего, что в случае с целыми числами вы проверяете используется Nullable<>.ToString(), а со строками - нет?
Нет, ничего. Строка и сама по себе вполне Nullable, использовать нулябельную обёртку нет необходимости.
А как оно вообще к делу относится? По-моему никак.
Число (хоть нулябельное Nullable<Int32>, хоть ненулябельное Int32) плюс нулл даёт нулл
Строка плюс нулл даёт строку.
Что и было написано.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732830
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП
Нет, ничего. Строка и сама по себе вполне Nullable, использовать нулябельную обёртку нет необходимости.
А как оно вообще к делу относится? По-моему никак.
Число (хоть нулябельное Nullable<Int32>, хоть ненулябельное Int32) плюс нулл даёт нулл
Строка плюс нулл даёт строку.
Что и было написано.
не совсем понимаю, почему стандарт ANSI SQL должен быть применим к ссылочным типам.
м.б. их и сравнивать нужно по тем же правилам и результатом ("строка" == null) должно быть null ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732843
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев Фёдорне совсем понимаю, почему стандарт ANSI SQL должен быть применим к ссылочным типам.
Это к Yo вопрос. Он начал сравнивать ANSI SQL и другие языки программирования

м.б. их и сравнивать нужно по тем же правилам и результатом ("строка" == null) должно быть null ?
Кто мешает?
В том же самом VB для определения, нулл чтото или не нулл - была конструкция IsNull(чтото)
Сравнение же с нуллом давало нулл. Как и положено.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732935
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!вообще интересно как в ANSI SQL было продавлено именно такой бредовый подход к нулам?Собрались умные люди и сделали единый логичный подход к любому неопределенному значению, вне зависимости от его типа. А Ораклу, как обычно, стандарты побоку, он выше этого. Ему свои баги дороже.
Yo.!C# - на конкатинацию с нулом выдает пустую строку
Java - на конкатинацию с нулом конкатинирует со строкой "null"
php - на конкатинацию с нулом конкатинирует с пустой строкой
т.е. все языки так или иначе выдают строку и только писающий против ветра ANSI SQL ...Yo.!да, чего-то я уйню спорол, конечно поведение точно такое же как у ораклаДа уж, всем уйням - уйня. Какая связь может быть между неназначенной ссылкой (пустым пойнтером) в процедурных ЯП и NULL значением в декларативном SQL? Это совершенно разные механизмы в принципиально разных языках. Или если буковки названия совпадают, и смысл должен быть тем же?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732937
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxВ oracle костылики и на этот случай есть, например, DECODE работает как (NULL=NULL)=TRUEЯ писал про логические операции, а при использовании decode никаких логических операций. И уж в случае с decode такое использование null крайне удобно (и отрицательных сторон я не знаю).
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732963
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov AndreyТут вы ошиблись уже в первом своем выводе, так как в Oracle
('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.Отлично, тут что совой об пенек, что пеньком об сову...
('' = '') д.б. true, а ('' <> '' ) - false, так как это вполне определенные значения (пустые), вполне поддающиеся сравнению на тождественность. Никакой неопределенности, которая есть NULL, при этом не возникает.
То есть, если я Вас правильно понял, '' принимается равной NULL, а строковый NULL равным '' не принимается? Да уж, железная логика...
Кстати, раз '' принимается как NULL, в Оракле в столбец varchar() not null пустые строки заносить нельзя?
Если так, это приведет к еще большей путанице при миграции. Полная жесть.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732974
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn
Кстати, раз '' принимается как NULL, в Оракле в столбец varchar() not
null пустые строки заносить нельзя?
Если так, это приведет к еще большей путанице при миграции.

Угу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и
тут же побежал снимать not null атрибут со всех строковых полей.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732994
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov Andrey,
Кстати, совсем забыл о конкатенации.
Получается, что в операциях сравнения NULL ведет себя нормально, а '' - как NULL. При этом в конкатенации '' ведет себя как положено, а уже NULL - как ''. Понятно, что хранятся они одинаково, но синтаксически поведение того и другого не симметрично и зависит от контекста.
Да уж, сию могучую логику аршином общим не измерить. В Оракул можно только верить :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732996
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovУгу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и
тут же побежал снимать not null атрибут со всех строковых полей.Угу, со всех. Включая ключевые
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733011
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnПолучается, что в операциях сравнения NULL ведет себя нормально, а '' - как NULL. При этом в конкатенации '' ведет себя как положено, а уже NULL - как ''. Понятно, что хранятся они одинаково, но синтаксически поведение того и другого не симметрично и зависит от контекста.Вы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111".
'' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733024
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey'' и null это одно и то же.
Фигасе
А в числовой столбец можно пустую строку записать?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733036
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПBogdanov Andrey'' и null это одно и то же.
Фигасе
А в числовой столбец можно пустую строку записать?Легко:
Код: plaintext
1.
2.
3.
SQL> create table a(x number);
Table created.
SQL> insert into a values('');
 1  row created.
Ну неужели так трудно понять, что в Oracle нет "пустых строк", есть только null.

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

ЗЫ. Возможно, Вы тут обсуждаете Оракл. А я тут пытаюсь говорить о смысле конструкции NULL в РСУБД вообще и ошбочном ее трактовании в Оракле.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733114
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov AndreyНу неужели так трудно понять, что в Oracle нет "пустых строк", есть только null.
Мне кажется, что понимание данного факта не так уж сложно вне зависимости от того соответствует это стандарту или нет, кажется кому-то правильным или нет.Ничего подобного. Факты говорят, что в синтаксисе SQL, в т.ч. Оракла, есть '' и есть NULL - две разные лексемы с синтаксически разными свойствами. Они же говорят, что в Оракле NULL и '' хранятся одинаково, откуда и пртиворечие.
При этом эта единая сущность для строк ведет себя как NULL в логике и как '' в строковых операциях.
Более того, получается, что в Оракле столбец с возможными пустыми строками даже не может входить в составной ключ, что уже совсем бардак и несовместимость с остальным миром РСУБД.
И эти факты ну никак не могут быть правильной реализацией NULL и '', вне зависимости от того, нравится кому-то Оракл или нет.
Лично мне он скорее нравится, но вот такие закидоны...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733138
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnБоюсь, что чушь тут пишут, но не я. На надо обижаться. Вы, говоря именно об Oracle, пытались сравнивать поведение пустой строки и null, я вам объясняю, что это - бессмысленно, так как в Oracle это два названия одной и той же величины.

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

FavnПолучается, что во всех типах NULL может означать или неопределенность, или пустое значение.Ну это вообще что-то мне непонятное. null всегда обозначает величину, обладающую описанными в документации свойствами. Никаких неопределенностей или пустот он не обозначает. Все это просто некоторые наглядные объяснения, помогающие запомнить свойства величины.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733152
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnBogdanov AndreyВы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111".
'' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.Боюсь, что чушь тут пишут, но не я.
Согласен, NULL можно использовать как пустое значение, в качестве специфичного флажка, хотя я лично считаю это ошибкой проектирования. Но никто не спорит с тем, что у NULL есть и другое значение - неопределенность. И это значение - первично, именно как неопределенность в троичную реляционную логику NULL и вводили (это, как я уже писал, прямо следует из логических операций над ним).
А вот '' как неопределенность трактовать ну никак нельзя, это именно пустое значение, что следует уже из операций над строками, например из конкатенации. Ну попробуйте к строке 'ABC' добавить неизвестную сейчас строку. Что логичнее получить - ту же 'ABC', или неизвестную строку, хоть и с 'ABC...' начинающуюся?Вы тут можете сколько угодно теоретизировать, но по сути NULL - это дополнительный бит информации. В оракле для строк его не ввели. Вероятно посчитав что пустая строка и так довольно красноречива. Вот и вся разница.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733156
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnФакты говорят, что в синтаксисе SQL, в т.ч. Оракла, есть '' и есть NULL - две разные лексемы с синтаксически разными свойствами.Да, лексемы две, но свойства у них одинаковые. В чем противоречие?
...
Рейтинг: 0 / 0
25 сообщений из 419, страница 12 из 17
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Все таки Oracle впереди планеты всей!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]