powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Все таки Oracle впереди планеты всей!
419 сообщений из 419, показаны все 17 страниц
Все таки Oracle впереди планеты всей!
    #36721738
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как ни крути, но Oracle лидер в СУБД. Все таки как не старается MS и другие догнать его, но пока тщетно. Сам я перешел на Oracle и понял как все же он логично устроен. Наверное стал религиозным фанатиком. У Oracle есть столько всяких вкусностей, что наверное его нужно выбирать для любого проекта. Кто-нибудь может привести аргументы, что это не так?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721753
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoodsOracle лидер в СУБД.
во блин, Америку открыл. успокойся лучше.

goldenfoodsесть столько всяких вкусностей, что наверное его нужно выбирать для любого проекта.
вот это уже идиотизм. Если, конечно, кроме Оракла ты больше ничего не знаешь, и знать не хочешь.

А еще тут есть несколько городских сумасшедших, которые тебе расскажут, что или FoxPro, или TJ7, или ... куда лучше Оракла.

Я же напомню выражение Михаила Елашкина: "Оракл тоже говно, но остальные еще хуже". Так что, я бы советовал придерживался мировосприятия именно в таком ключе. Потому что обратное близко к религиозному бреду.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721781
выбираю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldenfoods
у мня арм-нетбук, какую версию oracle посоветуете?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721790
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выбираю goldenfoods
у мня арм-нетбук, какую версию oracle посоветуете?Oracle Berkeley DB 11g + Oracle Berkeley DB SQL API :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721842
выбираю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш,
та вот, сижу и выбираю: oracle mysql, oracle derby(javadb), oracle berkeley db.
oralce oracle под арм не нахожу, а так хотелось :(.
наверное, плюну на oracle и поставлю firebird или postgresql.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721865
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoodsпонял как все же он логично устроен.

Логично устроен, говоришь... Какая же логика стоит за
неработоспособностью конструкции
Код: plaintext
select to_number(to_char( 1234 ,'TM'),'TM') from dual
???
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721880
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЛогично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции
Код: plaintext
select to_number(to_char( 1234 ,'TM'),'TM') from dual
???

Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который она не умеет и не может по бизнес-логике уметь обрабатывать - и удивляешься сообщению об ошибке. Следующим пунктом, видимо, будет удивление по поводу того, что конвертация cp1251 -> latin1 -> cp1251 проходит не для всех символов. Oracle виноват, однозначно.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721892
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
goldenfoodsпонял как все же он логично устроен.

Логично устроен, говоришь... Какая же логика стоит за
неработоспособностью конструкции
Код: plaintext
select to_number(to_char( 1234 ,'TM'),'TM') from dual
???


Это Вам пояснили ниже. Но даже если и это был бы баг, то не стоит из-за принимать решение о нелогичности оракла. Вот отсутствие журнала транзакций в файерберде это уже не логично. Давайте приводит аргументы по существу, а не искать "вшей".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721893
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выбираю goldenfoods
у мня арм-нетбук, какую версию oracle посоветуете?

Арм нетбуком будете пользоваться только Вы в силу его ограниченной вычислительной мощности, соответственно проектом это назвать нельзя.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721899
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoods wrote:

> любого проекта. Кто-нибудь может привести аргументы, что это не так?

Я могу. PLSQL -- плохой язык для программирования СУБД. В нём очень
много нереляционных возможностей.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721902
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoods wrote:

> принимать решение о нелогичности оракла. Вот отсутствие журнала
> транзакций в файерберде это уже не логично. Давайте приводит аргументы

Что ж там нелогичного ? Не нужен он там -- вот и нету его.
Но теперь уже кстати сделали.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721909
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который
она не умеет и не может по бизнес-логике уметь обрабатывать - и
удивляешься сообщению об ошибке.

Вот только почему-то:
1) Этот параметр не описан в документации как неработоспособный для
to_number;
2) Автоматическое определение формата числа смог сделать любой, кто в
детстве писал калькулятор, интерпретатор или хотя бы парсер, но не
разработчики Оракула, включая г-на Бегуна;
3) Ошибка звучит как "неправильное число", а не "неправильный формат".

Первые два пункта я ещё могу понять, а вот логику последнего - не
понимаю. Если параметр бредовый, почему на него нет ругани?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721943
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerDimitry SibiryakovЛогично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции
Код: plaintext
select to_number(to_char( 1234 ,'TM'),'TM') from dual
???

Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который она не умеет и не может по бизнес-логике уметь обрабатывать - и удивляешься сообщению об ошибке. Следующим пунктом, видимо, будет удивление по поводу того, что конвертация cp1251 -> latin1 -> cp1251 проходит не для всех символов. Oracle виноват, однозначно.


А нельзя вот та ?
Код: plaintext
select to_number(to_char( 1234 )) from dual
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721947
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoodsА нельзя вот та ?

Можно. Но зачем тогда вообще формат ТМ существует? Где логика?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721955
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПервые два пункта я ещё могу понять, а вот логику последнего - не
понимаю. Если параметр бредовый, почему на него нет ругани?
Вернее, "не та ругань". Неудачная диагностика - это, безусловно, недочёт. Хотя Вы выбрали далеко не самый яркий пример, куда хуже, например, любимая оракловая диагностика "не найдена правая скобка".

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

Однако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню).
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721961
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Если хотите поискать нелогичные решения в Oracle - я бы в первую очередь
сосредоточился на дико устаревшем ограничении идентификатора в 30 байт,
особенно актуальном в многобайтовых кодировках.

Ну, устаревшие решения не обязательно нелогичные. ЕМНИП идентификатор в
30 байт имеет какое-то отношение к правилам идентификаторов или имён
файлов в VAX VMS.

softwarer
Однако, это кажется мне мелочью по сравнению, например, с недавним
случаем, когда после нормального, беспроблемного увода компьютера в
hibernate firebird-овская база отказалась открываться с диагностикой со
смыслом "db file corrupted" (точной формулировки не вспомню).

Не слышал о таком случае. Где о нём писалось?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721965
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovМожно. Но зачем тогда вообще формат ТМ существует? Где логика?
Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721973
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе слышал о таком случае. Где о нём писалось?
У меня на компьютере о нём писалось. Пару недель назад.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721975
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов
прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить.

Ну, я обычно считаю логичным, что если число можно преобразовать в
строку с минимальным количеством символов, то должен существовать и
способ обратного преобразования. И то, что обратного преобразования не
существует, я считаю нелогичным. Но, очевидно, логичный Оракул
использует какую-то другую логику. Возможно, женскую.

Во всяком случае только женской логикой можно объяснить то, что функции
to_number и OCINumberFromString хотя и предназначены для одинаковой
цели, действуют по-разному и, вероятно, написаны разными людьми.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721982
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerУ меня на компьютере о нём писалось. Пару недель назад.

Т.е. беспроблемность заморозки на уровне "мамой клянусь", зоопарк
вирусов-антивирусов умолчательный и проверка файловой системы не
проводилась со времён покупки. Это не считая вольного пересказа ошибки...

Я видел комп, который регулярно сбрасывал ОЗУ вместо файла hiberfil.sys
прямо в бут-сектор. Жаль, что Оракула на нём не было установлено, а то
можно было бы на него свалить...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721985
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках.30 байт или все же 30 символов ?

softwarerОднако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню).В трекер, плс
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721997
выбираю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldenfoodsвыбираю goldenfoods
у мня арм-нетбук, какую версию oracle посоветуете?

Арм нетбуком будете пользоваться только Вы в силу его ограниченной вычислительной мощности, соответственно проектом это назвать нельзя.

Нетбуком, я не буду пользоваться, будут пользоваться пара десятков моих заказчиков (у которых по паре сотен клиентов, которые пользуются ихними услугами и софтом).
Мне нужно написать софт, который использует субд, должно все работать на x86-64, ARM (других условий по железу, пока не было).

А в силу его ограниченной вычислительной ... - может еще бронепоезд подогнать, чтобы горох списать, а то видишь ли воробьев развелось ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36721999
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladsoftwarerЕсли хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках.30 байт или все же 30 символов ?
Байт
В юникоде - 15 символов.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722005
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выбираю
oralce oracle под арм не нахожу, а так хотелось :(.

oracle lite
http://www.oracle.com/technology/products/lite/index.html
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722054
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
softwarer
Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов
прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить.

Ну, я обычно считаю логичным, что если число можно преобразовать в
строку с минимальным количеством символов, то должен существовать и
способ обратного преобразования. И то, что обратного преобразования не
существует, я считаю нелогичным. Но, очевидно, логичный Оракул
использует какую-то другую логику. Возможно, женскую.


Оооо я встречался с такой логикой :)
Как-то во времена DOS пользовался одним редактором (их тогда много разных было).
Ну попользовался, сохранился и решил выйти. Ага, как бы не так, перебрал 101 способ выхода, после чего пошел на поклон к владельцам этого чуда (ментам). Ответ поразил до глубины души:


Ты чо, дурак? Как заходил так и выходи ... по F4 !!!


Не улавливаете аналогий?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722056
выбираю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,
Oracle Database Lite Mobile Server
Спасибо, но того что нужно, самой субд, под ARM нет.
Плюс заказчики оценили, во что $ им это выльется.
Так что, будем что-то другое пробовать.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722060
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТ.е. беспроблемность заморозки на уровне "мамой клянусь",
Это куда достойнее, нежели грубые передёргивания, рассчитанные на неграмотного лоха, которые Вы позволяете себе начиная с первого поста этой беседы.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722139
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Это куда достойнее, нежели грубые передёргивания, рассчитанные на
неграмотного лоха, которые Вы позволяете себе начиная с первого поста
этой беседы.

Вообще-то как раз в этой теме я покамест придерживаюсь голых фактов и к
передёргиваниям не прибегал. Просто продавливаю свой старый вопрос:
"есть строка, полученная посредством to_char(..., 'TM'). Как её
преобразовать обратно в число?"
Согласно моей логике это должно было бы быть to_number(..., 'TM').
Однако облом. Поэтому я и пытаюсь выбить из топикстартера (который
заявил, что "как все же он /Оракул/ логично устроен") какую логику надо
применить, чтобы найти в Оракуле функцию обратного преобразования данной
строки.

ЗЫ: Я знаю ответ и знаю что ты тоже его знаешь, но мне интересно как
будет выкручиваться именно топикстартер... Покамест от него прозвучали
два ответа: "а у вас негров линчуют а в Firebird лога нет" и
"to_number вообще без параметра fmt". Оба бесполезны. Второй - потому
что без параметра fmt нельзя использовать параметр nlsparam.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722252
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, не кормите тролля.
И вообще, в постгрисе с преобразованиями получше.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722254
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Dimitry Sibiryakov

ты можешь без соплей и эмоций объяснить, что ты ожидаешь получить когда пишешь to_number(..., 'TM') ? я реально не понимаю ход твоих мыслей, строку что-ли ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722264
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!2Dimitry Sibiryakov

ты можешь без соплей и эмоций объяснить, что ты ожидаешь получить когда пишешь to_number(..., 'TM') ? я реально не понимаю ход твоих мыслей, строку что-ли ?

Вероятно он хочет, чтобы была симметрия между функциями to_char и "обратной" (по мнению Dimitry Sibiryakov) ей to_number. Но кто сказал, что она обратна? Симметрия как раз вероятно и заключается в наличии параметра TM.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722269
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
что ты ожидаешь получить когда пишешь to_number(..., 'TM') ? я реально
не понимаю ход твоих мыслей, строку что-ли ?

Число, независимо от формата, в котором оно в строке: '123456.09' или
'1.2345609e5'.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722272
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и чтобы десятичным разделителем всегда считалась точка, независимо
от NLS_ параметров сессии.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722297
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Число, независимо от формата, в котором оно в строке: '123456.09' или
'1.2345609e5'.


хорошо, а почему ты решил, что такое поведение нужно добиваться параметром ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select to_number('123456.09') from dual ;

TO_NUMBER('123456.09')
----------------------
              123456 . 09 

SQL> select to_number('1.2345609e5') from dual ;

TO_NUMBER('1.2345609E5')
------------------------
                123456 . 09 

и второй вопрос, как ты перевел фразу "The FM and FX modifiers, used in format models in the TO_CHAR function, control blank padding and exact format checking."
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36722324
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
а почему ты решил, что такое поведение нужно добиваться параметром ?

Какое слово из "чтобы десятичным разделителем считалась точка,
независимо от текущих NLS-настроек сессии" ты не заметил?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36723637
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36723676
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVвыбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.
ну кто бы сомневался
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724017
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVвыбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.
Нуууу. Пока никому не удалось объяснить автору TJ7, что его СУБД возможно не самая лучшая в мире. Это показатель?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724197
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVвыбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.
Исчите. А здесь полно народу за бесплатно обосновают? Вон хоть лисовод в этой ветке надыбал аргумент какой никакой. На тысчу баксов конечно не потянет но на пару баксов мож и сгодится.
Или они давно нашли где это, и здесь опробируют обоснования? А потом состригут бабло и с нами (типа тестерами их обоснования) не поделятся?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724539
Eugenkru10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зайцев ФёдорFreemanZAVвыбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.
Нуууу. Пока никому не удалось объяснить автору TJ7, что его СУБД возможно не самая лучшая в мире. Это показатель?
Самая лучшая пока что это Visual Foxpro 9!
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724730
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugenkru10Самая лучшая пока что это Visual Foxpro 9!
Конечно же, только Вы упорно умалчиваете как быть "лисе" на кроссплатформе. Или "лисоводы" настолько суровы что кроме винды ниначем больше не работают?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724767
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724770
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"так" - имелось ввиду "работают на винде" конечно, а не на FP.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724781
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы?
А как же быть тогда остальным 3%? Получается ФП не самый лучший.
Теперь приведите процент сколько серверов используют на платформе вин/линукс и т.д., сомневаюсь что 97% серверов работают под виндовс.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724789
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SalleriscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы?
А как же быть тогда остальным 3%? Получается ФП не самый лучший.
Теперь приведите процент сколько серверов используют на платформе вин/линукс и т.д., сомневаюсь что 97% серверов работают под виндовс.
FP уже стал серверной СУБД? Вы за ходом мысли следите хоть немного, плз.
а насчет 97% процентов серверов не зря сомневаетесь, потому что здесь картина совсем другая. Поищите по форуму, было обсуждение этого вопроса, с конкретными цифрами.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724815
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmFP уже стал серверной СУБД? Вы за ходом мысли следите хоть немного, плз.
Вы разве не встречале таких извратов когда из ФП делали клиентсерверную? Как-то раз видел в одной организации такой изврат, написана специальная прослойка и т.д., выглядит конечно страшно но работает.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724850
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SallerВы разве не встречале таких извратов когда из ФП делали клиентсерверную? Как-то раз видел в одной организации такой изврат, написана специальная прослойка и т.д., выглядит конечно страшно но работает.
Вообще говоря, примитив типа FP - довольно естественный выбор для трёхзвенок, где appserver и работает "прослойкой" и "делает клиент-серверной".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36724962
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВообще-то как раз в этой теме я покамест придерживаюсь голых фактов
Особенно ярко это видно в отношении описания моего компьютера :)

Dimitry SibiryakovСогласно моей логике это должно было бы быть to_number(..., 'TM').
А почему не from_char(...,'TM') или, например, не to_number('MT',...)?

Dimitry SibiryakovПокамест от него прозвучали два ответа: "а у вас негров линчуют а в Firebird лога нет"
Это, конечно, не лучший ответ. В поисках логики я бы, например, спросил, почему если в системном словаре есть таблицы, например, RDB$DATABASE и RDB$GENERATORS, то получаешь облом в более чем логичной попытке запросить RDB$TABLES, а когда наконец находишь некую RDB$RELATIONS и вполне логично переходишь к RDB$RELATION_FIELDS, оказывается, что в этой замечательной таблице как-то сложно найти информацию о типе данных этого поля; почему, когда наконец находишь некую зашифрованную информацию о типе в таблице RDB$FIELDS (вроде бы логичной, но где же, чёрт возьми, RDB$TABLES?) оказывается, что как-то нетривиально понять, к какой же всё-таки таблице относится это поле?

Dimitry SibiryakovВторой - потому что без параметра fmt нельзя использовать параметр nlsparam.

Что, кстати, в рамках заданного вопроса совершенно неважно, и если предположить, что тебя действительно интересует ответ именно на тот вопрос, выглядит как "лишь бы придраться".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725168
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerкогда наконец находишь некую RDB$RELATIONS и вполне логично переходишь к RDB$RELATION_FIELDS, оказывается, что в этой замечательной таблице как-то сложно найти информацию о типе данных этого поляВ чём сложность, в трёх джойнах ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
  r.rdb$relation_name     table_name
  ,r.rdb$field_position+ 1  field_pos
  ,r.rdb$field_name       field_name
  ,t.rdb$type_name        field_type
  ,f.rdb$field_length     field_len
  ,f.rdb$field_scale      field_scale
from rdb$fields f
join rdb$relation_fields r
join rdb$types t on f.rdb$field_type = t.rdb$type and t.rdb$field_name='RDB$FIELD_TYPE'
on f.rdb$field_name = r.rdb$field_source and r.rdb$system_flag =  0 
order by r.rdb$relation_name, r.rdb$field_position 
(содрано отсюда )
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725278
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидsoftwarerкогда наконец находишь некую RDB$RELATIONS и вполне логично переходишь к RDB$RELATION_FIELDS, оказывается, что в этой замечательной таблице как-то сложно найти информацию о типе данных этого поляВ чём сложность, в трёх джойнах ?
В том, что её там нет, совершенно не видно, откуда бы её взять и никакими "логическими рассуждениями" этот путь не найти. Это надо просто знать. Причём как раз в том самом месте - data dictionary - которое должно быть максимально дружественно к "читателю". "Запомните это, дети, патамушта панять это - нэвазможна" (с)

Таблоид(содрано отсюда )
Вот именно. Тут у нас нелогично прочитать смысл параметра в документации, а Вы говорите - "содрать отсюда".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725307
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Особенно ярко это видно в отношении описания моего компьютера :)

Это экстраполяция описания компьютеров пользователей, которые обычно
приходят с аналогичными проблемами в тематический раздел. Ничего
личного, голая статистика.

softwarer
А почему не from_char(...,'TM') или, например, не to_number('MT',...)?

Потому что эти функции не документированы. А использование
недокументированных возможностей - чревато боком. Потому и г-н Бегун о
них отказывается рассказывать.

softwarer
получаешь облом в более чем логичной попытке запросить RDB$TABLES

Эта логика основывается на недостаточной информированности: Firebird -
реляционная СУБД, а не табличная.

softwarer
Что, кстати, в рамках заданного вопроса совершенно неважно, и если
предположить, что тебя действительно интересует ответ именно на тот
вопрос, выглядит как "лишь бы придраться".

Вон там, повыше, я уже указывал Ё! на это дополнительное требование,
которое он тоже проигнорировал. И которое не выглядит как "лишь бы
придраться", если учесть, что мне нужно обрабатывать поток данных с
Firebird, которая использует только точку как разделитель. И так да, я
не могу передавать данные в двоичном формате, поскольку требуется
единообразная обработка разных типов (да и по-любому в Оракуле нет
птичьих Decimal и Numeric). Потому строка была выбрана как наименьший
деноминатор. И я не могу зафиксировать точку как разделитель в Оракуле,
поскольку игнорировать желания пользователя, выраженные в виде NLS
настроек - плохой тон.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725337
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
никакими "логическими рассуждениями" этот путь не найти.

Логику обычно применяют, когда документации уже недостаточно. Как раз
потому, что достоверность результатов логики ниже.

softwarer
Тут у нас нелогично прочитать смысл параметра в документации, а Вы
говорите - "содрать отсюда".

Это "отсюда" было написано как раз для неспособных открыть для себя
Language Reference.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725347
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerпочему, когда наконец находишь некую зашифрованную информацию о типе в таблице RDB$FIELDS (вроде бы логичной, но где же, чёрт возьми, RDB$TABLES?) оказывается, что как-то нетривиально понять, к какой же всё-таки таблице относится это поле?
потому что у каждой СУБД есть собственный словарь, и этот словарь вовсе не обязан быть стандартным - нет таких требований. При желании можно было бы создать view на системные таблицы, которые имитируют стандартный интерфейс словаря (не помню, как он называется).

Припоминаю какой-то топик, в котором этот вопрос обсуждался, и выяснилось, что вовсе не все СУБД имеют совместимый словарь, да и совместимость у тех, где он есть, тоже хромает.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725390
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvПри желании можно было бы создать view на системные таблицы, которые имитируют стандартный интерфейс словаря (не помню, как он называется).

INFORMATION_SCHEMA views.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725401
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinINFORMATION_SCHEMA views.
да, точно, спасибо.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725414
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЭто экстраполяция
Это не "голые факты". Итого, ты задокументированно сказал неправду.

Dimitry SibiryakovПотому что эти функции не документированы.
Дык ты таки реши, ты пользуешься "логикой" или "документацией". Потому как если пользоваться документацией, "твоего логичного решения" не выходит, а если пользоваться логикой - как мы видим, "твоё логичное решение" ничуть не более логично, нежели несколько других.

Dimitry SibiryakovПотому и г-н Бегун
А он-то тут при чём?

Dimitry Sibiryakovsoftwarerполучаешь облом в более чем логичной попытке запросить RDB$TABLES
Эта логика основывается на недостаточной информированности: Firebird - реляционная СУБД, а не табличная.
/me радостно убежал выполнять оператор CREATE RELATION.... ля, снова облом! И они таки где-то находят здесь логику

Dimitry Sibiryakovесли учесть, что мне нужно обрабатывать
Я вполне верю, что в рамках какой-то другой задачи тебе нужно обрабатывать. В рамках вопроса to_number(to_char()) - это требование бессмысленно. Вот это как раз - голый факт.

Теперь давай поговорим о твоей задаче.

Dimitry Sibiryakovпоток данных с Firebird, .....
Ну ОК. Допустим, Firebird не умеет использовать правильный формат вывода чисел, я это могу понять. Но не очень понимаю, в чём проблема указать nls параметры. В том, что Firebird ещё и не умеет выдавать строку в каком-то одном формате, а пихает её наперебой в разных? Как-то некрасиво получается, если одному продукту разрешается вываливать любой мусор, и это нормально, а другой объявляется нелогичным только потому, что в нём требуется чуть подумать "как можно этот мусор разгрести".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725441
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvпотому что у каждой СУБД есть собственный словарь, и этот словарь вовсе не обязан быть стандартным
Ну, по стандарту обязан, но в целом я согласен и ничуть не требую от него быть стандартным. Но было бы логично , если бы этот "собственный словарь" был удобным .

Когда я учил людей Oracle, я всегда говорил им одну фразу: "Запомните одно-единственное слово, dba_views. Сделав запрос к этому представлению, вы легко найдёте способ достать из системного словаря любую информацию, которая там только есть". И они таки легко находили.

Поскольку Дмитрий постулирует необходимость следовать некоей высосанной из пальцаобщепринятой логике, я просто продемонстрировал попытку применить этот же подход к более родной ему тематике.

kdvи выяснилось, что вовсе не все СУБД имеют совместимый словарь, да и совместимость у тех, где он есть, тоже хромает.
Мало того, сама по себе INFORMATION_SCHEMA как она описана в стандарте не то чтобы отличается удобством.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725472
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Это не "голые факты". Итого, ты задокументированно сказал неправду.

Или я сказал правду, а тебе теперь стыдно за зоопарк вирусов у себя на
компе и ты всё отрицаешь. Твоё слово против моего.

softwarer
Дык ты таки реши, ты пользуешься "логикой" или "документацией".

Т.е. до места "логику обычно применяют, когда документации уже
недостаточно. Как раз потому, что достоверность результатов логики ниже"
ты не дочитал...

softwarerИ они таки где-то находят здесь логику
Кто такие "они"? Я покамест не видел чтобы тут (или где-либо ещё) кто-то
восхищался тем "как все же он логично устроен" в отношении Firebird.

softwarerНо не очень понимаю, в чём проблема указать nls параметры.

В том, что указать их без указания fmt - невозможно. А fmt, работающего
как с фиксированным так и экспоненциальным представлением числа - нет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725649
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Поскольку Дмитрий постулирует необходимость следовать некоей
высосанной из пальцаобщепринятой логике

Вообще-то я всего лишь пытаюсь опровергнуть выдвинутый в заголовочном
сообщении тезис "в Оракуле всё очень логично". Показать, что какой-либо
другой сервер более логичен я не пытаюсь.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725860
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
softwarer
Это не "голые факты". Итого, ты задокументированно сказал неправду.

Или я сказал правду,
Нет, не или. Ни одного шанса. Ты сказал:

Dimitry SibiryakovВообще-то как раз в этой теме я покамест придерживаюсь голых фактов

Также ты сказал:

Dimitry SibiryakovЭто экстраполяция

Итого, ты сказал, что придерживаешься голых фактов и одновременно признал, что как минимум часть изложенного - не факт, а экстраполяция. Таким образом, минимум в одном из этих утверждений ты солгал. Все исходные - доступны в топике и проверяемы. То есть твоя ложь - объективно подтверждённый факт. Привыкай с этим жить, удачи.

Dimitry SibiryakovВ том, что указать их без указания fmt - невозможно. А fmt, работающего
как с фиксированным так и экспоненциальным представлением числа - нет.
И что же в этом нелогичного?

Ты опровергаешь тезис "всё логично" примером отсутствия такого смешанного формата. Так объясни, пожалуйста, что нелогичного в его отсутствии? Или каждый раз, когда ты придумываешь какую-то ненужную фичу, её отсутствие кажется тебе нелогичным?

Dimitry SibiryakovВообще-то я всего лишь пытаюсь опровергнуть выдвинутый в заголовочном
сообщении тезис "в Оракуле всё очень логично". Показать, что какой-либо другой сервер более логичен я не пытаюсь.
Видишь ли в чём дело, говорить "очень", "не очень" или там "ниже среднего" можно только относительно какого-либо ожидаемого уровня. Скажем, прыжок на 18 метров в длину - очень длинный, потому как больше мирового рекорда, а прыжок на 50 см в длину - не очень длинный, потому как любой здоровый человек легко прыгнет дальше.

Я, если ты заметишь, всего лишь пытаюсь показать, что твой оппонент чертовски неудачно выбрал аргументацию, и в рамках его логики можно найти куда более яркие примеры. Тем не менее, раз уж так сложилось, у тебя есть выбор: либо согласиться с тем, что Firebird - более-менее логичный продукт и может использоваться как базис для сравнения, либо объявить, что Firebird с твоей точки зрения - образец нелогичности и по сравнению с ним нетрудно выглядеть очень логичным. Твой ход?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36725954
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИ что же в этом нелогичного?

Действительно, что нелогичного в однонаправленных преобразованиях?.. В
математике нет обратного преобразования для возведения в квадрат, хэши
опять же... В Оракуле нет обратного преобразования для формата TM. Раз
нет, значит никому не было нужно. Да, топикстартер прав, Оракул логичен.
И вообще он впереди планеты всей. Некоторые, правда, считают, что эта
планета катится в ад, но и это логично. Все идите на Оракул!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726278
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ Оракуле нет обратного преобразования для формата TM. .. Некоторые, правда, считают, что эта планета катится в ад,
То есть, по делу сказать нечего. ЧТД.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726283
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам то понял что написал? Подробнее про Линукс+MSSQL...
Про использование СУБД я не писал, обсуждалась схема ФП+дбф. Если использовать те СУБД которые ты перечислил то ФП выкинуть как мусор.
Иди читай топик внимательно чтобы не писать тут бред.
Модератор: не кормите тролей
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726503
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
goldenfoods wrote:

> принимать решение о нелогичности оракла. Вот отсутствие журнала
> транзакций в файерберде это уже не логично. Давайте приводит аргументы

Что ж там нелогичного ? Не нужен он там -- вот и нету его.
Но теперь уже кстати сделали.


Ну как быть с незкоммиченными транзакциями в момент аварийного завершения работы сервера?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726505
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
goldenfoods wrote:

> любого проекта. Кто-нибудь может привести аргументы, что это не так?

Я могу. PLSQL -- плохой язык для программирования СУБД. В нём очень
много нереляционных возможностей.


В том то его и прелесть. Вы можете объединять код SQL И код обычного языка программирования в одном флаконе ( блоке, процедуре не суть важно).
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726506
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoods
Ну как быть с незкоммиченными транзакциями в момент аварийного
завершения работы сервера?

В момент завершения - никак, на то оно и аварийное. При последующем
запуске - пометить как откатившиеся и всё.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726507
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
goldenfoodsпонял как все же он логично устроен.

Логично устроен, говоришь... Какая же логика стоит за
неработоспособностью конструкции
Код: plaintext
select to_number(to_char( 1234 ,'TM'),'TM') from dual
???


Почему Вы решили что эти функции обратны? Если принять условие, что функции не есть обратны, то можно сделать логический вывод (как и все в оракле, не забываем, что я фанатик), что параметр и не должен быть в обеих функциях сразу
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726514
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
softwarer
Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который
она не умеет и не может по бизнес-логике уметь обрабатывать - и
удивляешься сообщению об ошибке.

Вот только почему-то:
1) Этот параметр не описан в документации как неработоспособный для
to_number;
2) Автоматическое определение формата числа смог сделать любой, кто в
детстве писал калькулятор, интерпретатор или хотя бы парсер, но не
разработчики Оракула, включая г-на Бегуна;
3) Ошибка звучит как "неправильное число", а не "неправильный формат".

Первые два пункта я ещё могу понять, а вот логику последнего - не
понимаю. Если параметр бредовый, почему на него нет ругани?


Я думаю средство диагностики может иметь ошибки. Касательно логики устройства Оракл, я прежде всего имею ввиду его архитектуру, а не набор функций, хотя они тоже логичны. Как раз отсутствие параметра, из=за которого весь сыр бор и доказывает логичность этого замечательного продукта.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726518
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerDimitry SibiryakovПервые два пункта я ещё могу понять, а вот логику последнего - не
понимаю. Если параметр бредовый, почему на него нет ругани?
Вернее, "не та ругань". Неудачная диагностика - это, безусловно, недочёт. Хотя Вы выбрали далеко не самый яркий пример, куда хуже, например, любимая оракловая диагностика "не найдена правая скобка".

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

Однако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню).
Вот почему категорически запрещено ставить файерберд для корпоративного использования. Просто вредно. Лучше потратиться и купить оракл стандарт едишн ван стоит 180 долл пер юзер. А если вообще нет денег, то экспресс едишн очень удобен+получаешь бесплатно еще и разработку веб-интерефейса к базе. Такой себе акцесс а ля оракл получается.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726519
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvgoldenfoodsOracle лидер в СУБД.
во блин, Америку открыл. успокойся лучше.

goldenfoodsесть столько всяких вкусностей, что наверное его нужно выбирать для любого проекта.
вот это уже идиотизм. Если, конечно, кроме Оракла ты больше ничего не знаешь, и знать не хочешь.

А еще тут есть несколько городских сумасшедших, которые тебе расскажут, что или FoxPro, или TJ7, или ... куда лучше Оракла.

Я же напомню выражение Михаила Елашкина: "Оракл тоже говно, но остальные еще хуже". Так что, я бы советовал придерживался мировосприятия именно в таком ключе. Потому что обратное близко к религиозному бреду.

А что вера это плохо? Человек без веры в что либо не имеет цели.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726520
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
softwarer
Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов
прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить.

Ну, я обычно считаю логичным, что если число можно преобразовать в
строку с минимальным количеством символов, то должен существовать и
способ обратного преобразования. И то, что обратного преобразования не
существует, я считаю нелогичным. Но, очевидно, логичный Оракул
использует какую-то другую логику. Возможно, женскую.

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


Это Ваша личная логика.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726522
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
softwarer
Это куда достойнее, нежели грубые передёргивания, рассчитанные на
неграмотного лоха, которые Вы позволяете себе начиная с первого поста
этой беседы.

Вообще-то как раз в этой теме я покамест придерживаюсь голых фактов и к
передёргиваниям не прибегал. Просто продавливаю свой старый вопрос:
"есть строка, полученная посредством to_char(..., 'TM'). Как её
преобразовать обратно в число?"
Согласно моей логике это должно было бы быть to_number(..., 'TM').
Однако облом. Поэтому я и пытаюсь выбить из топикстартера (который
заявил, что "как все же он /Оракул/ логично устроен") какую логику надо
применить, чтобы найти в Оракуле функцию обратного преобразования данной
строки.

ЗЫ: Я знаю ответ и знаю что ты тоже его знаешь, но мне интересно как
будет выкручиваться именно топикстартер... Покамест от него прозвучали
два ответа: "а у вас негров линчуют а в Firebird лога нет" и
"to_number вообще без параметра fmt". Оба бесполезны. Второй - потому
что без параметра fmt нельзя использовать параметр nlsparam.


Где про негров было сказано? Да файерберда лога нет вот и все факт нелогичности. Но вроде как появился.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726523
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAVвыбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.

И они не боятся потерять деньги.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726525
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eugenkru10Зайцев ФёдорFreemanZAVвыбираю Oracle впереди планеты всей!
Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу.
Нуууу. Пока никому не удалось объяснить автору TJ7, что его СУБД возможно не самая лучшая в мире. Это показатель?
Самая лучшая пока что это Visual Foxpro 9!

Как вот этот продукт хранит данные?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726529
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы?

Откуда такая информация? Например я использую FreeBSD, Oracle Linux для серверной части. FreeBSD+gnome для десктопа и я думаю, таких как я очень много
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726532
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
softwarerИ что же в этом нелогичного?

Действительно, что нелогичного в однонаправленных преобразованиях?.. В
математике нет обратного преобразования для возведения в квадрат, хэши
опять же... В Оракуле нет обратного преобразования для формата TM. Раз
нет, значит никому не было нужно. Да, топикстартер прав, Оракул логичен.
И вообще он впереди планеты всей. Некоторые, правда, считают, что эта
планета катится в ад, но и это логично. Все идите на Оракул!


Еще раз Ваши утверждения насчет обратности уже есть неверны, соответственно дальнейшая цепочка тоже.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726534
goldenfoods
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
goldenfoods
Ну как быть с незкоммиченными транзакциями в момент аварийного
завершения работы сервера?

В момент завершения - никак, на то оно и аварийное. При последующем
запуске - пометить как откатившиеся и всё.


Как об этом узнает сервер? В нормальных СУБД это видно по журналу транзакций. Ну а как файерберд понимает, что транзакции были не полностью выполнены. Никак понять не могу. Могли бы Вы разъяснить?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726562
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoods
Ну а как файерберд понимает, что транзакции были не полностью выполнены.
Никак понять не могу. Могли бы Вы разъяснить?

Очень просто. В момент первоначальной загрузки базы транзакции не могут
быть активны по определению. Соответственно все транзакции, помеченные
как активные - результат некорректного завершения и должны быть помечены
как откатившиеся. Никаких логов не требуется.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726600
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Очень просто....Никаких логов не требуется.


Правильно я понимаю, что следствие такой "простоты" - как минимум не возможность Timе In Poinе Restore и всего другого функционала, связанного с наличием лога транзакций?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726623
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoodsiscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы?

Откуда такая информация? Например я использую FreeBSD, Oracle Linux для серверной части. FreeBSD+gnome для десктопа и я думаю, таких как я очень много
позравляю. Ты входишь в 3%!
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726629
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prarklinкак минимум не возможность Timе In Poinе Restore и всего другого функционала, связанного с наличием лога транзакций?
не знаю, что Вы имеете в виду под "всего функционала". Если отсюда исключить ACID, то возможно, да.
Ну и, если в point in time используются маркеры времени, то в ФБ их нет.

goldenfoodsВот почему категорически запрещено ставить файерберд для корпоративного использования. Просто вредно.
а вы не читайте всякую муйню. Это я Вам говорю как человек, который чинит базы IB/FB после сбоев оборудования (дисков, контроллеров и т.п.).

goldenfoodsДа файерберда лога нет вот и все факт нелогичности. Но вроде как появился.
не-лог-ичность от слова лог? Возможно. Насчет "вроде" - нет, не появился. Вы если чего про другие СУБД не знаете, Вы спрашивайте, а не наезжайте. Наезды они не красят наезжающего, совершенно.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726639
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldenfoodsВот почему категорически запрещено ставить файерберд для корпоративного использования. Просто вредно. Лучше потратиться и купить оракл стандарт едишн ван стоит 180 долл пер юзер. А если вообще нет денег, то экспресс едишн очень удобен+получаешь бесплатно еще и разработку веб-интерефейса к базе. Такой себе акцесс а ля оракл получается.
Пипец (с) фильм
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726727
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinПравильно я понимаю, что следствие такой "простоты" - как минимум не возможность Timе In Poinе Restore и всего другого функционала, связанного с наличием лога транзакций?Насчёт PITR (point in time recovery) - не правильно.
Добавив маркеры времени к тр-циям и удерживая сборку мусора можно получить снимок всей БД на любой момент.
Насчёт "всего другого функционала" - уточните о чём именно речь.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726736
Eugenkru10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какова хера удаляют мои ответы?
Больше я тут отвечать не будут.
Пошёл он накуй этот тупорылый SergSuper - долбоёб какой то!
Эта сцука животное неблагодарное, он может тока Хер дрочить и посты удалять,
больше нихера он не может потому что он бездарь.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726741
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНасчёт PITR (point in time recovery) - не правильно.
Добавив маркеры времени к тр-циям и удерживая сборку мусора можно получить снимок всей БД на любой момент.

Гм... А не проще ли будет, таки, сделать отдельный "честный" лог?! Что будете делать, если будет поврежден сам файл бд, в котором и "временные метки" и "мусор"?

hvladНасчёт "всего другого функционала" - уточните о чём именно речь.

Да все, что связано с использованием лога транзакций - репликация, зеркалирование.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726751
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Да все, что связано с использованием лога транзакций - репликация,
зеркалирование.

Отлично делаются и без лога.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726757
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОтлично делаются и без лога.

Готов выслушать архитектуру альтернативных решений...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726775
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinГотов выслушать архитектуру альтернативных решений...

http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_replicator
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726783
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
pkarklinГотов выслушать архитектуру альтернативных решений...

http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_replicator


автор...IBReplicator implements this architecture by way of a change log ...

Дык по другому то никак, ну никак без лога не обойтись. В том или ином его виде.

авторInterBase Replication is not built into the database engine

Поэтому "change log" прикручивается "сбоку" в виде

авторordinary application which accesses the database via the InterBase client API
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726800
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Дык по другому то никак, ну никак без лога не обойтись. В том или ином
его виде.

Ну это и ежу понятно. Если брать по большому счёту, то лог, ведущийся не
для всей базы, а для каждой отдельной записи и называется MGA.
Хотя, конечно, есть варианты... Не все в этом списке признаются в
ведении лога: http://www.firebirdfaq.org/faq249/
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726822
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinЧто будете делать, если будет поврежден сам файл бд, в котором и "временные метки" и "мусор"?
А что будете делать Вы? Ну, когда поврежден лог, а есть база, не рассматриваем :-)
А вот если будет повреждена база, но есть лог? Лог же не вечный, из него базу целиком не восстановить.
Понятно, что можно взять какой-то бэкап базы, и накатить сверху лог, если они "стыкуются".
Проблема в том, что FB настолько широко используется, что в массе стоит на компах с одним диском (в лучшем случае raid 1), и даже если этот комп обслуживает админ, то админ невероятно тупой, и не способен даже бэкапы регулярно делать.

Я понимаю, что это издержки "дешевизны" ФБ, но такова жизнь. Там где ФБ используется с базами в десятки и сотни гигабайт, обычно и администраторы вменяемые, и бэкапы всякие (включая инкрементные), так что повреждение базы обычно проблем не представляет, и процедура восстановления похожа на откат до какого-то недавнего предыдущего состояния.

Впрочем, я увлекся. Моя мысль была о том, что там, где в массе стоит ФБ, любое повреждение Оракловской базы или лога вызовет абсолютно тот же эффект, что и повреждение БД ФБ.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726835
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
Впрочем, я увлекся. Моя мысль была о том, что там, где в массе стоит ФБ, любое повреждение Оракловской базы или лога вызовет абсолютно тот же эффект, что и повреждение БД ФБ.
в оракле принято в таких условиях (1 hdd) уносить rsync'ом арклоги т.е. размер потерь будет совершенно несоизмерим, даже если админ поленится настроить адекватно размер REDO ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726838
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
в оракле принято в таких условиях (1 hdd) уносить rsync'ом арклоги

Это если админ вообще не отключит эти самые арклоги...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726849
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinhvladНасчёт PITR (point in time recovery) - не правильно.
Добавив маркеры времени к тр-циям и удерживая сборку мусора можно получить снимок всей БД на любой момент.

Гм... А не проще ли будет, таки, сделать отдельный "честный" лог?!На мой персональный взгляд, "честный" лог может быть полезен в Firebird только с точки зрения производительности при записи - за счёт последовательного IO. Правда этот IO лишний, так что с ним не всё так хорошо, как некоторые считают. Ну и я не слышал, чтобы лог тр-ций в IB применяли именно для увеличения производительности.
Кстати, грядёт эпоха SSD, и вопрос random vs sequential IO практически закроется сам-собой.

pkarklinЧто будете делать, если будет поврежден сам файл бд, в котором и "временные метки" и "мусор"?kdv частично ответил. Напомню только, что в Firebird используется стратегия записи careful writes, благодаря которой файл БД защищён от поломок из-за краха движка.

pkarklinhvladНасчёт "всего другого функционала" - уточните о чём именно речь.

Да все, что связано с использованием лога транзакций - репликация, зеркалирование.Бекверсии - это тот же самый лог тр-ций, с точки зрения функционала. Удерживая сборку мусора можно чётко получить всю ту же инф-цию, которую содержит лог. Эффективность чтения такого лога - другой вопрос, но никто пока что не пытался оптимизировать хранение бекверсий с учётом их повторного использования.

Зеркалирование - в IB испокон века есть shadow для зеркалирования файла БД (эдакий raid1).
Если речь о зеркалировании на другой сервер, то накат дельт инкрементного бекапа (а он многоуровневый, в отличие от MSSQL) с успехом заменит накат журналов тр-ций.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726884
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в оракле говорят есть другая очень правильная и логичная фишка - NULL и пустая строка неразличимы
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726949
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvА что будете делать Вы? Ну, когда поврежден лог, а есть база, не рассматриваем :-)
А вот если будет повреждена база, но есть лог? Лог же не вечный, из него базу целиком не восстановить.
Понятно, что можно взять какой-то бэкап базы, и накатить сверху лог, если они "стыкуются".

Необходимым условием возможности восстановления на момент сбоя (к примеру, поврежден файл бд) является наличие непрерывной цепочки бэкапов (разных типов) и полная модель восстановления. На реальном примере...

Есть некая бд, стратегия резервного копирования которой выглядит следующим образом:

1. Полный бэкап в воскресенье в 0:00;
2. Дифференциальный бэкап каждый день, кроме воскресенья, в 0:00;
3. Бэкап лога транзакций - каждый час.

Предположим, что в четверг в 17.45.13 происходит развал массива на котором лежит файл бд.

Действия админа в данном случаи при необходимости восстановления на момент сбоя:

1. Выполнить Tail-Log Backup - т.е. снять резервную копию лога транзакций, которые "накопились" с момента последнего бэкапа лога в 17.00;
2. Восстановить фуллбэкап от воскресенья;
3. Востановить дифф от четверга;
4. Востановить все бэкапы лога за четверг;
5. Восстановить бэкап лога, сделанный на шаге 1,

тем самым получив бд в состоянии, ровно до сбоя.

kdvПроблема в том, что FB настолько широко используется, что в массе стоит на компах с одним диском (в лучшем случае raid 1), и даже если этот комп обслуживает админ, то админ невероятно тупой, и не способен даже бэкапы регулярно делать .

К сожалению, это проблема не только у FB.

kdvЯ понимаю, что это издержки "дешевизны" ФБ, но такова жизнь.

Да, но даже Экспресс редакция MS SQL имеет описанный выше функционал.

kdvМоя мысль была о том, что там, где в массе стоит ФБ, любое повреждение Оракловской базы или лога вызовет абсолютно тот же эффект, что и повреждение БД ФБ.

По большому счету согласен, но все-тки здОрово иметь как можно больше возможностей для восстановления.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726959
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSв оракле говорят есть другая очень правильная и логичная фишка - NULL и пустая строка неразличимы
Да, есть. И с тех пор, как мне пришлось выполнить проект на MSSQL, я стал эту фишку очень ценить. А ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726962
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНа мой персональный взгляд, "честный" лог может быть полезен в Firebird только с точки зрения производительности при записи - за счёт последовательного IO. Правда этот IO лишний, так что с ним не всё так хорошо, как некоторые считают. Ну и я не слышал, чтобы лог тр-ций в IB применяли именно для увеличения производительности.

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

hvladНапомню только, что в Firebird используется стратегия записи careful writes, благодаря которой файл БД защищён от поломок из-за краха движка.

Согласитесь, что кроме поломок движка, существует еще множество других типов поломок (программных и аппаратных), которые могут привести к повреждению файла бд. и очень бы хотелось иметь возможность восстановления на момент сбоя.

hvladЗеркалирование - в IB испокон века есть shadow для зеркалирования файла БД (эдакий raid1).

Такое зеркалирование существовало еще в MS SQL 6.5.

hvladЕсли речь о зеркалировании на другой сервер, то накат дельт инкрементного бекапа (а он многоуровневый, в отличие от MSSQL) с успехом заменит накат журналов тр-ций .

Отквоченное соответствует Log Shippingу в MS SQL, и это совсем не зеркалирование, которое позволяет менять "на лету" роли серверов (principal\mirror), причем с автоматическим переподключеним клиента на зеркало в случае выхода из строя основного сервера.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36726996
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДа, есть. И с тех пор, как мне пришлось выполнить проект на MSSQL, я стал эту фишку очень ценить.
я пожалуй тоже тогда начну очень ценить фишку mssql где null не рассматривается как пустая строка
softwarer
А ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи.
это вы типа к тому, что имеем одну нелогичную вещь, но уравновешиваем ее наличием другой логичной? Ну.. хорошо ) Кстати это-же означает что в unique столбец мы можем сложить несколько пустых строк... даже не знаю как тут с логичностью...

Предлагаю тогда пойти дальше и приравнять в оракле значения null и 0 для integer столбцов, так сказать для окончательной победы логики над здравым смыслом. Логика торжествует, планета катится в ад (с)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727009
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSsoftwarerДа, есть. И с тех пор, как мне пришлось выполнить проект на MSSQL, я стал эту фишку очень ценить.
я пожалуй тоже тогда начну очень ценить фишку mssql где null не рассматривается как пустая строка
softwarer
А ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи.
это вы типа к тому, что имеем одну нелогичную вещь, но уравновешиваем ее наличием другой логичной? Ну.. хорошо ) Кстати это-же означает что в unique столбец мы можем сложить несколько пустых строк... даже не знаю как тут с логичностью...

Предлагаю тогда пойти дальше и приравнять в оракле значения null и 0 для integer столбцов, так сказать для окончательной победы логики над здравым смыслом. Логика торжествует, планета катится в ад (с)

Да плевать куда катится твоя логика. Тебе же сказали, фишка не логичная, не значит неудобная.
И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют).
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727060
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerА ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи.
вообще-то, это поведение декларируется стандартом. Хотя, видимо, логичность тут неочевидная даже для ANSI-комитета, ведь, насколько я помню, старые версии стандарта трактовали этот нюанс иначе.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727128
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Да плевать куда катится твоя логика. Тебе же сказали, фишка не логичная, не значит неудобная.
И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют).
ага, видимо такие-же как и ты родили похожую фишку в vb.net, который позволяет скомпилить вот такое:
Код: plaintext
1.
2.
Dim i As Integer
i = Nothing
MessageBox.Show(i.ToString())
по сути всем value типам можно присвоить nothing и они получают default значение. Я-то раньше ломал голову откуда у этого бреда ноги растут, а это похоже эквиваленты Gluk'а в Майкрософт экспериментируют с отношением логика/удобство..
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727131
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSв оракле говорят есть другая очень правильная и логичная фишка - NULL и пустая строка неразличимы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
SQL> create table NULL_Empty_Str
   2   (
   3     EXM NUMBER,
   4     TECT_NULL varchar2( 10 )
   5   );
 
Table created
SQL> INSERT INTO NULL_Empty_Str VALUES ( 1 , NULL);
 
 1  row inserted
SQL> COMMIT;
 
Commit complete
SQL> SELECT * FROM NULL_Empty_Str WHERE TECT_NULL IS NULL;
 
       EXM TECT_NULL
---------- ----------
          1  
SQL> SELECT * FROM NULL_Empty_Str WHERE TECT_NULL = NULL;
 
       EXM TECT_NULL
---------- ----------
SQL> SELECT * FROM NULL_Empty_Str WHERE TECT_NULL = '';
 
       EXM TECT_NULL
---------- ----------
SQL> DELETE FROM NULL_Empty_Str;
 
 1  row deleted
SQL> COMMIT;
 
Commit complete
SQL> INSERT INTO NULL_Empty_Str VALUES ( 1 , '');
 
 1  row inserted
SQL> COMMIT;
 
Commit complete
SQL> SELECT * FROM NULL_Empty_Str WHERE TECT_NULL IS NULL;
 
       EXM TECT_NULL
---------- ----------
          1  
SQL> SELECT * FROM NULL_Empty_Str WHERE TECT_NULL = NULL;
 
       EXM TECT_NULL
---------- ----------
SQL> SELECT * FROM NULL_Empty_Str WHERE TECT_NULL = '';
 
       EXM TECT_NULL
---------- ----------
SQL> DELETE FROM NULL_Empty_Str;
 
 1  row deleted
 
SQL> 
При вставке принимает пустую строку( '' ) за NULL, т.е. присваивает не '', а NULL. При выборке вроде различает не принимает пустую за NULL. В Оракле трехзначная логика: Истинно, Ложно и Не известно. Приравнивание к NULL вседа дает UNKNOWN, а к '' могут быть ЛОЖНО или ИСТИННО.
NULL трактуется как неизвестно что а не как какое-то известное значение, тада как '' известное значение.

Т.е. тут скорее всего речь не о том что не различает, а о том что при добавлении вместо '' добавляется NULL.
Поскоку смысл '' до конца не ясен. Но его моно трактовать как, например, "свойство отсутсвует". Однако, тада возможно нужна четырехзначная логика. И типа специальный знак а не ''. Ну, вроде, Кодд был сторонником четырехзначной.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727160
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoТ.е. тут скорее всего речь не о том что не различает, а о том что при добавлении вместо '' добавляется NULL.

если вместо "пусто" в БД идет null, то наличие пустых строк в базе ведь невозможно получается?

vadiminfo
Поскоку смысл '' до конца не ясен.

ну здрасте
vadiminfo
Но его моно трактовать как, например, "свойство отсутсвует"
я его обычно трактую как "пустая строка" ) Вполне себе значение
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727176
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSGluk (Kazan)Да плевать куда катится твоя логика. Тебе же сказали, фишка не логичная, не значит неудобная.
И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют).
ага, видимо такие-же как и ты родили похожую фишку в vb.net, который позволяет скомпилить вот такое:
Код: plaintext
1.
2.
Dim i As Integer
i = Nothing
MessageBox.Show(i.ToString())
по сути всем value типам можно присвоить nothing и они получают default значение. Я-то раньше ломал голову откуда у этого бреда ноги растут, а это похоже эквиваленты Gluk'а в Майкрософт экспериментируют с отношением логика/удобство..

вот тут ты меня задел :) я очень не люблю Бейсик и хамов (не знаю почему)
отправляйся ка ты в игнор
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727209
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSя пожалуй тоже тогда начну очень ценить фишку mssql где null не рассматривается как пустая строка
Не смею мешать. Правда, мне даже стало интересно: может быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? Я вот за всю свою жизнь столкнулся только с одним таким случаем.... причём, сколько людей я ни спрашивал, ни этого, ни другого мне никто так и не рассказал.... из чего я делаю вывод, что они не сталкивались даже с одним.

StalkerSэто вы типа к тому, что имеем одну нелогичную вещь, но уравновешиваем ее наличием другой логичной?
Это к тому, что имеем две логичных и удобных фишки.

StalkerSКстати это-же означает что в unique столбец мы можем сложить несколько пустых строк...
Именно.

StalkerSдаже не знаю как тут с логичностью...
Великолепно тут с логичностью. Пример на пальцах: атрибут "номер паспорта физ.лица". У физ.лица может не быть паспорта, но если есть, его номер уникален. И хотел бы я посмотреть на обоснование логичности ограничения "паспорта может не быть только у одного физ. лица".

StalkerSПредлагаю тогда пойти дальше и приравнять в оракле значения null и 0 для integer столбцов, так сказать для окончательной победы логики над здравым смыслом.
Вы, похоже, путаете понятия. Здравый смысл - это соответствие '' и null. "Логика, основанная на здравом смысле" - соответственно то же самое. "Логика, основанная на формальном подходе" - требует их различать. Таким образом, "победа логики над здравым смыслом" возможна только в варианте "различать '' и null".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727218
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StalkerSя его обычно трактую как "пустая строка" ) Вполне себе значение
Строка - набор символов. Нет символов - нет строки, т.е. null
а 0 - это значение
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727223
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoПоскоку смысл '' до конца не ясен. Но его моно трактовать как, например, "свойство отсутсвует". Однако, тада возможно нужна четырехзначная логика. И типа специальный знак а не ''. Ну, вроде, Кодд был сторонником четырехзначной.Вот реальный пример. Для платежки формируется назначение платежа. Причем формирование как бы многоуровневое - сначала определяется на самом нижнем уровне, потом если там не определилось на более высоком и т.д. Логично было бы если не определилось возвращать null. Но дело в том что строка назначения платежа может быть пустая и это нормально, т.е. тогда надо возвращать '' и оно должно отличаться от null. Как вышли из положения: решили вместо пустой строки передавать один пробел.
Привыкнуть конечно можно, у кого оракл родной так вообще считают что так и должно быть, но я вот каждый раз ностальгирую :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727225
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модСтрока - набор символов. Нет символов - нет строки, т.е. null

Да щаз...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727241
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSесли вместо "пусто" в БД идет null, то наличие пустых строк в базе ведь невозможно получается?
Ну получается, что попасть пустым строкам туда затруднительно в общем случае.

StalkerS
vadiminfo
Поскоку смысл '' до конца не ясен.

ну здрасте
vadiminfo
Но его моно трактовать как, например, "свойство отсутсвует"
я его обычно трактую как "пустая строка" ) Вполне себе значение

Хорошо. Как, например, понимать пустую строку в поле ФИО?
Вот в Аксцесс есть и пустая строка и NULLS. Так или иначе, если я исчу не пустые значения в общем случае я должен проверять и '' и NULLS. Правда там в Аксцеесе вроде есть возможность различать '' и NULL, типа оно буит что-то выводить. Но на практике мало кто это все заполняет, и при написании запроса часто хотелось бы шобы там были тока NULL.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727262
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrsoftwarerА ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи.
вообще-то, это поведение декларируется стандартом.
Спасибо, я в курсе. Фишка в том, что не все сервера поддерживают это поведение.

dimitrХотя, видимо, логичность тут неочевидная даже для ANSI-комитета, ведь, насколько я помню, старые версии стандарта трактовали этот нюанс иначе.
Старые - это какие? В SQL92 уже было именно так.

vadiminfoПри выборке вроде различает не принимает пустую за NULL.
Ээ.... если это действительно писал Вадим, то я глубоко озадачен.

StalkerSесли вместо "пусто" в БД идет null, то наличие пустых строк в базе ведь невозможно получается?
А что именно Вы называете "наличие пустых строк в базе"? С практической точки зрения - в базе лежит значение, которое в ряде случаев (когда удобно) ведёт себя как пустая строка, в ряде случаев (когда удобно) - как null. Единственный минус заключается в том, что эти случаи - когда как - надо знать и понимать; это несколько осложняет жизнь начинающим разработчикам, зато облегчает освоившим.

StalkerSага, видимо такие-же как и ты родили похожую фишку в vb.net, который позволяет скомпилить вот такое:

Dim i As Integer
i = Nothing
MessageBox.Show(i.ToString())
Полагаю, это родили те, кого достало из-за идиотизмов Java получать на каждом шагу NullPointerException и постоянно писать нечто типа

Код: plaintext
 if  (str ==  null  || str.equals ("")) ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727300
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
vadiminfoПри выборке вроде различает не принимает пустую за NULL.
Ээ.... если это действительно писал Вадим, то я глубоко озадачен.


Ну я считал, что если не различала, то запросы

Код: plaintext
1.
SELECT * FROM NULL_Empty_Str WHERE TECT_NULL IS NULL;

и

Код: plaintext
1.
SELECT * FROM NULL_Empty_Str WHERE TECT_NULL = '';
вернули бы одно и то же.

Но все выглядит менно так что в табле нет '', а есть NULL.
И при трехзначной логике, мне кажется, это честным.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727319
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют).Да плевать на твои личные предпочтения, ты скажи лучше -
Gluk (Kazan)Тебе же сказали, фишка не логичная, не значит неудобная .
где именно "сказали" ? В каком посте, кто сказал?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727414
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНе смею мешать. Правда, мне даже стало интересно: может быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? Я вот за всю свою жизнь столкнулся только с одним таким случаем.... причём, сколько людей я ни спрашивал, ни этого, ни другого мне никто так и не рассказал.... из чего я делаю вывод, что они не сталкивались даже с одним.

пароль, или секретный ответ на вопрос. Есть принципиальная разница в пустом пароле и отсутствии пароля. Скажем, если в систему пытаемся ввести пользователя которым обладает null в качестве пароля - то это нарушение бизнес-правил, отменяем транзакцию и показываем сообщение об ошибке. С пустым паролем - сохраняем.
Вывод на экран существуюших аттрибутов некоего обьекта. Выводим только те, кто имеет не null. Какой-то аттрибут может иметь пустую строку в качестве значения. Пользователь может увидеть это и отреагировать
softwarer
Вы, похоже, путаете понятия. Здравый смысл - это соответствие '' и null.
тут моя сильно несогласная. Не надо смешивать принципиально разные вещи в одну кучи из-за каких-то абстрактных удобств. Мне например, тождественность null и "пусто" совсем не кажется удобным. Как я уже приводил пример сверху, кому-то показалось удобным присваивать дефолтные значения value типам в бейсике, а мне это кажется жутко неудобным и путающим стройную логику системы.
Лично для меня удобно - это когда логично. Неужели в конце концов так трудно написать isnull() ?
vadiminfo
Хорошо. Как, например, понимать пустую строку в поле ФИО?

как пустую строку. Если нехочется иметь пустую строку - добавляем check. Почему мы должны отождествлять ее с null?
softwarer
А что именно Вы называете "наличие пустых строк в базе"? С практической точки зрения - в базе лежит значение, которое в ряде случаев (когда удобно) ведёт себя как пустая строка, в ряде случаев (когда удобно) - как null.

это что за хитрая дуальность такая, значение само определяет, что и когда мне удобно? :)
Не понятно на самом деле, Вадим вон пишет что is null и = '' возвращают разные значения.
Имхо, выглядит как усложнение на ровном месте (да еще и несоответствует стандарту)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727426
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПолагаю, это родили те, кого достало из-за идиотизмов Java получать на каждом шагу NullPointerException и постоянно писать нечто типа

Код: plaintext
 if  (str ==  null  || str.equals ("")) ...

не знаю как там в яве, но в дотнет исключение о попытке поступа к null обьекту говорит о серьезных промахах в структуре программе. Идиот здесь программист, а не компилятор
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727468
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StalkerS
пароль, или секретный ответ на вопрос. Есть принципиальная разница в пустом пароле и отсутствии пароля. Скажем, если в систему пытаемся ввести пользователя которым обладает null в качестве пароля - то это нарушение бизнес-правил, отменяем транзакцию и показываем сообщение об ошибке. С пустым паролем - сохраняем.

в упор не вижу разницы. пароль он или задан или нет. вопрос или есть или нет.
а в век веб приложений, где бровсеры принципиально неразличают нулл и пустую строку какое либо другое поведение становиться совершенно бессмысленным ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727474
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Правда, мне даже стало интересно: может быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? вот простой пример
допустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет
если привязана надо писать "выплата 100 руб согласно договору №100", если нет - просто "выплата 100 руб"
если бы null не был бы пустой строкой, можно было бы просто написать
Код: plaintext
'выплата 100 руб '||nvl('согласно договору №'||dog_num, '')
мелочь, но удобно, приятно, облегчает жизнь и не вызывает острого желания выкинуть её нафиг

ну и сейчас, глядя на написанные тексты, я вижу много мест, которые можно было бы несколько упростить
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727477
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinhvladНа мой персональный взгляд, "честный" лог может быть полезен в Firebird только с точки зрения производительности при записи - за счёт последовательного IO. Правда этот IO лишний, так что с ним не всё так хорошо, как некоторые считают. Ну и я не слышал, чтобы лог тр-ций в IB применяли именно для увеличения производительности.

Уже не маловажный фактор, позволяющий, поместив лог на более шустрый диск (массив), увеличить быстродействие операций модификации, за счет отдельного ассинхронного процесса применения транзакция из лога к файлу бд.Я это всё понимаю. Но - см выше про IB и его лог, живой пример.
Может они конечно что-то не доделали, но об этом мы узнаем только если исходники IB опять откроют

pkarklinhvladНапомню только, что в Firebird используется стратегия записи careful writes, благодаря которой файл БД защищён от поломок из-за краха движка.

Согласитесь, что кроме поломок движка, существует еще множество других типов поломок (программных и аппаратных), которые могут привести к повреждению файла бд. и очень бы хотелось иметь возможность восстановления на момент сбоя.Ну так она есть. Бекапы. Инкрементные в том числе.
На всякий случай - в Firebird инкрементный бекап многоуровневый, где содержимое уровня N + 1 есть разница по отношению к уровню N. Уровень 0 - полная копия БД.
В MSSQL в этом смысле инкрементный бекап 1-уровневый, т.е. всегда содержит разницу по отношению к последнему полному бекапу, iirc.
Кладём дельту на отдельный диск, обеспечиваем постоянный режим работы в режиме бекапа, и получаем почти полный аналог журналирования.
И - да, дельта будет нормально использоваться движком даже после аварийного рестарта.

pkarklinhvladЕсли речь о зеркалировании на другой сервер, то накат дельт инкрементного бекапа (а он многоуровневый, в отличие от MSSQL) с успехом заменит накат журналов тр-ций .

Отквоченное соответствует Log Shippingу в MS SQL, и это совсем не зеркалирование, которое позволяет менять "на лету" роли серверов (principal\mirror), причем с автоматическим переподключеним клиента на зеркало в случае выхода из строя основного сервера.И при чём тут наличие\отсутствие журнала тр-ций ? Mirror обеспечивается вышеуказанным накатом дельт. Переключение ролей серверов и клиентов - задача не для движка БД и от наличия лога не зависит.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727484
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS
vadiminfo
Хорошо. Как, например, понимать пустую строку в поле ФИО?

как пустую строку. Если нехочется иметь пустую строку - добавляем check. Почему мы должны отождествлять ее с null?

Т.е. у чела ФИО пустая строка? Шо это значит? Я как раз не говорил об отождествлении пустой строки с NULL. Я предлагал Вам отказаться от пустой строки, до выяснения ея смысла. Вот NULL - означает, например, не известно значение. Т.е. у чела есть ФИО, но оно не известно. А что тада означает пустая строка?
Другое дело что свойство может отсутствовать. Например, у чела нет крыльев, поэтому длина крыла ротсутствует. Получается, что у Оракла NULL в общем случае использовать и как свойство отсутсвует. А пустую строку моно было бы трактовать как свойство отсутсвует. Но я все еще думаю, что для свойства отсутствует нуно спец знак и четырехзначная логика. Иначе все равно полумеры, путаница.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727497
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinНеобходимым условием возможности восстановления на момент сбоя (к примеру, поврежден файл бд) является наличие непрерывной цепочки бэкапов (разных типов) и полная модель восстановления. На реальном примере...
разумеется, полностью согласен.

pkarklin1. Полный бэкап в воскресенье в 0:00;
2. Дифференциальный бэкап каждый день, кроме воскресенья, в 0:00;
3. Бэкап лога транзакций - каждый час.
в FB 2.x без логов это легко и непринужденно реализуется входящей в комплект утилитой nbackup. За исключением того, что при сбое в 17:45 информация, измененная и записанная за 45 минут (с 17:00), в FB все-таки будет потеряна. Потому что есть только "дифференциальные" (инкрементные) бэкапы.
Для восстановления надо будет всего-лишь "склеить" nbackup-ом
- фуллбэкап от воскресенья
- инкремент от четверга
- инкремент от 17:00
по скорости это равно скорости копирования обычных файлов.

pkarklinДа, но даже Экспресс редакция MS SQL имеет описанный выше функционал.
FB 2.x имеет описанный выше функционал, с упомянутым исключением. В InterBase чуть не так, там это похоже на снапшоты баз, плюс журнал (страниц), но принцип тот же самый. Возможно что в ФБ не хватает журнала как в IB для исключения потерь вот этих 45 минут.
Кстати, в Interbase point in time recovery есть.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727517
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo
Т.е. у чела ФИО пустая строка? Шо это значит?
У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727520
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Зеркалирование - в IB испокон века есть shadow для зеркалирования файла
БД (эдакий raid1).
Если речь о зеркалировании на другой сервер

....то тень нормально живёт и на NFS.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727606
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS, по той логике, можно было бы отождествить FALSE и NULL.
Аргументировать можно как "TRUE - есть, FALSE - нет, NULL - тоже нет".
А потом прикрутить движки таблиц, убрать лишний функционал,
добавить немного глюков, горсточку тормозов и мы получим... MySQL
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727610
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
в FB 2.x без логов это легко и непринужденно реализуется входящей в
комплект утилитой nbackup. За исключением того, что при сбое в 17:45
информация, измененная и записанная за 45 минут (с 17:00), в FB все-таки
будет потеряна.

Если потери данных допустимы, то standby делается асинхронной
репликацией вплоть до real-time репликации, которая сводит возможные
потери к данным одной транзакции. Если потери данных даже теоретически
не допустимы, то требуется синхронная репликация, делаемая с помощью
shadow или средствами Jaybird/IBO/TPC. Это голая реальность, такая же
как ЗСЭ. Его можно ненавидеть, можно пытаться обойти, но действительно
обойти - не получится. Точка.
"Это я тебе, голуба, говорю как краевед." (с)

Поведение любого сервера в этом плане одинаково. Различаются только
используемые средства.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727651
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев Фёдорvadiminfo
Т.е. у чела ФИО пустая строка? Шо это значит?
У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж.
Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует.
У Оракла NULL и для не известного, а для свойства отсутсвует как получится. Ну, чаще это декомпозиция. Адреса в другой табле и у бомжей запис в ней отсутсвуют. Ну это больше похоже на NULL. Ить если Вы используете пустое для свойство отсутсвует, то ожидается что на попытку его сравнить со значением, оно как-то скажет, что это бессмысленно. А оно не говрит ниче такого, сранивает и возвращает FALSE, как будто свойство есть но оно не равно. Тада, возможно, луче NULL.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727691
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoЗайцев Фёдорvadiminfo
Т.е. у чела ФИО пустая строка? Шо это значит?
У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж.
Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует.
Свойство присутствует - и это пустая строка. Т.е. оно было заведено операционистом, в отличии от NULL, где еще ничего не известно.

PS. А не могли бы Вы по-русски писать? Ей богу читать тяжело, да и неприятно.
Если можете, конечно
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727710
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зайцев Фёдор
У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж.

поубивал бы таких проектировщиков. в прошлом году отгадывал - вместо адреса есть пробел, пустая строка, # и @ - вот %$@ть что эта хрень означает ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727730
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerСпасибо, я в курсе. Фишка в том, что не все сервера поддерживают это поведение.
я сильно подозреваю, что большинство. Так что не совсем понятно, зачем это считать "логичной фишкой" именно оракла.

softwarerСтарые - это какие? В SQL92 уже было именно так.
в SQL89 было иначе
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727731
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКладём дельту на отдельный диск, обеспечиваем постоянный режим работы в режиме бекапа, и получаем почти полный аналог журналирования .

Согласитесь, что все таки не полный, ибо, как совершенно верно подметил kdv, восстановиться можно будет на момент завершения последнего инкрементного бэкапа, а не на момент сбоя.

hvladПереключение ролей серверов и клиентов - задача не для движка БД и от наличия лога не зависит.

За переподключение клиентов, естевенно, отвечает клиентский механизм доступа к данным, ориентируясь на роль сервера, но вот переключение ролей - это именно задача движка, причем двух "связанных" движков и без той или иной реализации лога, само зеркалирование, переключение ролей и т.п. реализовать практически невозможно.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727741
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSupervadiminfoЗайцев Фёдорvadiminfo
Т.е. у чела ФИО пустая строка? Шо это значит?
У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж.
Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует.
Свойство присутствует - и это пустая строка. Т.е. оно было заведено операционистом, в отличии от NULL, где еще ничего не известно.

PS. А не могли бы Вы по-русски писать? Ей богу читать тяжело, да и неприятно.
Если можете, конечно
Я стараюсь по-русски, но не вседа же получается делать то что мы стараемся.

ФИО - пустая строка не бывает. Ну нет таких ФИО. А то о чем Вы говорите, это типа инициализация. NULL не инициализировано, а пустая инициализировано, но не заполнено - это все програмисткие какие-то манипуляции. Ну если данные не структурированы, без прогерства никак, то да. Ну Оракла не структурированные данные LOBы. Ну там есть такое.
Но что до РМД, то тут данные не нуждаются в таком прогерстве. В этом то все и дело (иначе зачем все это придумывали?). И операционист завел ошибочные данные - пустую строку. А мне теперь делать отчет. Я проверил на NULL, и думал что все хорошо. Распечатали а там половина не заполнено.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727743
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
поубивал бы таких проектировщиков. в прошлом году отгадывал - вместо адреса есть пробел, пустая строка, # и @ - вот %$@ть что эта хрень означает ?
а что она вообще может означать? а что означает "москва пирогова 12-1 50" ?
отвечать не обязательно, ибо адреса - отличная тема для битвы на 100500 страниц )
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727745
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли потери данных..., то ... делается...

Поведение любого сервера в этом плане одинаково. Различаются только используемые средства.


Согласитесь, что использовать только встроенные возможности движка куда проще, чем реализовывать все то, что я поскипал в цитировании?!
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727767
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinhvladКладём дельту на отдельный диск, обеспечиваем постоянный режим работы в режиме бекапа, и получаем почти полный аналог журналирования .

Согласитесь, что все таки не полный, ибо, как совершенно верно подметил kdv, восстановиться можно будет на момент завершения последнего инкрементного бэкапа, а не на момент сбоя.Во-первых, я выше написал "почти полный аналог"
Во-вторых, kdv не говорил о постоянный режиме работы в режиме бекапа.

pkarklinhvladПереключение ролей серверов и клиентов - задача не для движка БД и от наличия лога не зависит.

За переподключение клиентов, естевенно, отвечает клиентский механизм доступа к данным, ориентируясь на роль сервера, но вот переключение ролей - это именно задача движка, причем двух "связанных" движков Движок БД этим не занимается, уверяю вас. Там есть ещё много других движков.
Уберите возможность переключения ролей - и ничего не сломается с точки зрения работы экземляра БД.

pkarklinи без той или иной реализации лога, само зеркалирование, переключение ролей и т.п. реализовать практически невозможно.Дык "та или иная реализации лога" есть :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727833
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladkdv не говорил о постоянный режиме работы в режиме бекапа.

Видимо мы не совсем понимаем друг друга. :) Каков бы не был режим дискретного бэкапирования возможность восстановления (при отсутствии возможности сделать бэкап того, чего после сбоя не оказалось в бд) существует с дискретностью бэкапов.

hvladДвижок БД этим не занимается, уверяю вас. Там есть ещё много других движков.

Под "движком БД" я понимаю "весь" SQL Server, не разделяя его в данном контексте на Relation Engine, Storage Engine и т.п.

hvladДык "та или иная реализации лога" есть :)

Я с этим и не спорил. :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727889
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinhvladkdv не говорил о постоянный режиме работы в режиме бекапа.

Видимо мы не совсем понимаем друг друга. :) Каков бы не был режим дискретного бэкапирования возможность восстановления (при отсутствии возможности сделать бэкап того, чего после сбоя не оказалось в бд) существует с дискретностью бэкапов.Конечно. Я только намекал на то, что эту самую дискретность можно сделать совсем небольшой.

pkarklinhvladДвижок БД этим не занимается, уверяю вас. Там есть ещё много других движков.

Под "движком БД" я понимаю "весь" SQL Server, не разделяя его в данном контексте на Relation Engine, Storage Engine и т.п.А я - разделяю, и это важно в контексте нашего обсуждения.
Ибо само переключение мастеров при зеркалировании никак не зависит от способа ведения логов.

pkarklinhvladДык "та или иная реализации лога" есть :)

Я с этим и не спорил. :)Вот и славно :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727935
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoНо что до РМД, то тут данные не нуждаются в таком прогерстве. В этом то все и дело (иначе зачем все это придумывали?). И операционист завел ошибочные данные - пустую строку. А мне теперь делать отчет. Я проверил на NULL, и думал что все хорошо. Распечатали а там половина не заполнено.Согласитесь что когда можно проверить и на NULL и на пустую строку - возможностей то больше? Я могу еще узнать делал ли чего операционист и может он осознанно ввел пустую строку. Лучше разве есть он # и @ вместо этого будет ставить?
Вообще странно что надо доказывать что когда больше возможностей это лучше.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727964
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoоперационист завел ошибочные данные - пустую строку. А мне теперь делать отчет. Я проверил на NULL, и думал что все хорошо. Распечатали а там половина не заполнено.
where isnull(FLD,'') <> ''
where coalesce(FLD,'') <> ''
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727969
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperВообще странно что надо доказывать что когда больше возможностей это лучше.
Как уже тут кто-то писал: "если я этим не пользуюсь то это никому не нужно".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727977
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!в упор не вижу разницы. пароль он или задан или нет. вопрос или есть или нет.

пароль задан и это - пустая строка

vadiminfo
Т.е. у чела ФИО пустая строка? Шо это значит? Я как раз не говорил об отождествлении пустой строки с NULL. Я предлагал Вам отказаться от пустой строки, до выяснения ея смысла. Вот NULL - означает, например, не известно значение. Т.е. у чела есть ФИО, но оно не известно. А что тада означает пустая строка?
Другое дело что свойство может отсутствовать. Например, у чела нет крыльев, поэтому длина крыла ротсутствует. Получается, что у Оракла NULL в общем случае использовать и как свойство отсутсвует. А пустую строку моно было бы трактовать как свойство отсутсвует. Но я все еще думаю, что для свойства отсутствует нуно спец знак и четырехзначная логика. Иначе все равно полумеры, путаница.

NULL означает отсутствующее значение аттрибута (и не важно, будет-ли оно внесено позже или принципиально отсутствует). Пустая строка означает что аттрибут существует и значение его задано пустой строкой. И почему это все полумеры и путаница? Имхо логичнее просто некуда.
ОКТОГЕН
Аргументировать можно как "TRUE - есть, FALSE - нет, NULL - отсутствует или неизвестно ".

поправил
vadiminfo
Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует.
У Оракла NULL и для не известного, а для свойства отсутсвует как получится. Ну, чаще это декомпозиция. Адреса в другой табле и у бомжей запис в ней отсутсвуют.

т.е. хотите сказать, что в Оракле для отсутствующих свойств необходимо полную декомпозицию что-ли делать, либо делать "как получиться" ? :) Делать реализацию подтипов путем полного разнесения свойств в разные таблицы далеко не всегда хорошо.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36727982
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Согласитесь, что использовать только встроенные возможности движка куда
проще, чем реализовывать все то, что я поскипал в цитировании?!

Соглашусь, если а) эти возможности существуют и б) стабильно работают.
За MS не скажу, а вот Оракул хотя и имеет а, но с б у него проблемы,
судя по регулярно появляющимся темам в соответствующем разделе этого форума.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728031
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergSuperСогласитесь что когда можно проверить и на NULL и на пустую строку - возможностей то больше? Я могу еще узнать делал ли чего операционист и может он осознанно ввел пустую строку. Лучше разве есть он # и @ вместо этого будет ставить?
Вообще странно что надо доказывать что когда больше возможностей это лучше.

перл - предоставляет непомерно больше возможностей, но люди предпочитают строготипизованные языки ограничивающие возможности. и это правильно, потому как угадывать, кто чего подразумевал под пустой строкой глупо.
вообще странно, что нужно доказывать то, что давно победило и является стандартом в вебе ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728038
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
судя по регулярно появляющимся темам в соответствующем разделе этого форума.


только нужно учитывать, что там в оракле он будет иметь проблему с зависимостями, в firebird он будет иметь практически неразрешимую жопу ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728041
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperСогласитесь что когда можно проверить и на NULL и на пустую строку - возможностей то больше?

Ну тада можно еще понавводить всяких возможностей: отрицательная строка, Лябда строка и т.д.
И проверять их на здоровье. Но ведь, возможно, что МД придумывали не для того, скорее всего, чтобы обременять разработчика провераками чего-го выходящего за предметную область. Скорее все же для того, чтобы в БД была инфа о предметной области, которую можно извлекть не отвлекаясь на какие-то неожиданные особонности.

SergSuper
Я могу еще узнать делал ли чего операционист и может он осознанно ввел пустую строку.

Если это является информационной потребностью, то ожидается что будут специально заводиться какие-то журналы (таблицы в БД) где операционист будет прямо писать что он там делал и зачем, осознанол или нет. Или там аудиты разные.
РМД вроде не предусматривает анализа по таблам, о чем думал операционист. Все должно быть в виде описанных в таблах фактов, и то чего делал операциолист то же, если это представляет информационный интерес.

SergSuper
Лучше разве есть он # и @ вместо этого будет ставить?

Какая разница? Все равно инфы стоящей там извлечь нельзя и в том и другом случае. Если же речь идет о рассуждениях в условиях неопределенности, то для этого есть всякие там датамайнинги. Т.е. возможностей у Оракла хватит.

SergSuper
Вообще странно что надо доказывать что когда больше возможностей это лучше.

Ну не знаю. У мобилы с камерой больше возможностей чем у камеры: последние звонить не могут. Но некоторые покупают только камкеры, а некоторые мобилы без камер.
В данном же случае рациональное от такой типа возможности ставится под сомнение, а гемор от контроля того что же в БД записалось NULL или \'\', и что это значит может вызывать озабоченность временами. Особенно напрягает вместо а IS NULL писть а IS NULL or a = \'\'. Это и читается плоховато и вообще.
Я тоже за возможности. Потому Оракл выбрал. Но этой возможность предпочел бы не пользоваться до выяснения чего-то рационального в ней.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728070
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperВообще странно что надо доказывать что когда больше возможностей это лучше.Странно, что надо доказывать, что снижение удобства использования это плохо.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728091
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSпароль, или секретный ответ на вопрос. Есть принципиальная разница в пустом пароле и отсутствии пароля.
Замечательно. Тот самый единственный пример. Наконец-то кто-то вспомнил про ситуацию "пустой пароль мы сохраняем и не запрашиваем повторно, а при отсутствии пароля - запрашиваем его у пользователя". Правда, для СУБД это очень редкая задача :)

StalkerSВывод на экран существуюших аттрибутов некоего обьекта. Выводим только те, кто имеет не null. Какой-то аттрибут может иметь пустую строку в качестве значения. Пользователь может увидеть это и отреагировать
Это уже не "конкретный пример", а некие абстрактные философствования с закольцованной логикой: "это нужно потому что может понадобиться для чего-нибудь".

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

StalkerSКак я уже приводил пример сверху, кому-то показалось удобным присваивать дефолтные значения value типам в бейсике,
Кстати, я не увидел в приведённом примере дефолтных значений. Может быть, конечно, и такая реализация, но увидел я всего лишь умное поведение для случая obj = null, сродни классическому дельфовому

Код: plaintext
1.
2.
3.
4.
 procedure  TObject.Free;
 begin 
   if  Self <>  nil   then 
    Destroy;
 end ;

StalkerSНеужели в конце концов так трудно написать isnull() ?
О, это один из тех вопросов, который отличает "теоретиков" от "практиков". Первые уверены, что нетрудно. Вторые, написав этот isnull() несколько десятков, несколько сотен или несколько тысяч раз, начинают любить теории других теоретиков, где не нужно заниматься подобной тупизной.

StalkerSНе понятно на самом деле, Вадим вон пишет что is null и = '' возвращают разные значения.
Они действительно возвращают разные значения. Тем не менее я.. изрядно не согласен с формулировками Вадима и не готов за них отвечать.

StalkerSИмхо, выглядит как усложнение на ровном месте
"Не то, к чему я привык" - вовсе не всегда "усложнение", часто наоборот.

StalkerSдопустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет ... если бы null не был бы пустой строкой, можно было бы просто написать ...
А в чём разница, если null - пустая строка? Заменить nvl на nvl2 - и всего делов-то. С другой стороны, когда null - не пустая строка, простейшее выражение вида name || patronymic || surname превращаются в нечто нечитаемое.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728122
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreySergSuperВообще странно что надо доказывать что когда больше возможностей это лучше.Странно, что надо доказывать, что снижение удобства использования это плохо.да, я неудачно выразился
я имел в виду больше информации
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728127
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSNULL означает отсутствующее значение аттрибута (и не важно, будет-ли оно внесено позже или принципиально отсутствует). Пустая строка означает что аттрибут существует и значение его задано пустой строкой. И почему это все полумеры и путаница? Имхо логичнее просто некуда.

Все дел в том что может быть важно: не известно или значение отсутсвует. Если не важно и NULL и для того и для другого подходит в данной МД, то пустая строка зачем нужна вообще не ясно.
Значение заданное пустой строкой не имеет смысла в большинстве случаев в реальном мире, который собсно и отражается в БД.
Про полумеры - это если NULL использовать как не известно, а типа пустую строку как свойство не определено. Т.е. это я типа искал какое-то применение пустым строкам.

StalkerS
т.е. хотите сказать, что в Оракле для отсутствующих свойств необходимо полную декомпозицию что-ли делать, либо делать "как получиться" ? :) Делать реализацию подтипов путем полного разнесения свойств в разные таблицы далеко не всегда хорошо.
Я имел в виду что не только в Оракле декомпозиция чаcто применяется для отсутсвующих свойст. Ну действительно, табла со свойствами, которых заведомо нет у сущностей, выглядит как некоея искажение отображения реальности в БД. И констатировал, что это ближе к NULL чем '', если декомпозицию не делать.
Если нет четырехзначной логики, то и использование пустых строк для таких свойт, чтобы отличать их от не известно (которые толкуются в этом случае NULL) - полумера, которая не на много улучшает картину, но все так же чревато путанницей.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728140
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
только нужно учитывать, что там в оракле он будет иметь проблему с
зависимостями, в firebird он будет иметь практически неразрешимую жопу ...

Поскольку мне в техподдержку таковых жалоб не поступало, могу
авторитетно заявить, что "неразрешимая жопа" существует исключительно в
твоём воображении.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728145
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoВ данном же случае рациональное от такой типа возможности ставится под сомнение, а гемор от контроля того что же в БД записалось NULL или '', и что это значит может вызывать озабоченность временами. Особенно напрягает вместо а IS NULL писть а IS NULL or a = ''. Это и читается плоховато и вообще.
Можно, как уже говорилось, isnull(str_attr, '') = '', символов не намного больше, чем str_attr is null.
А может пойти еще дальше, и строку, состоящую ТОЛЬКО из n пробелов также заненять на null, ведь временами и это вызывает озабоченность не меньшую, чем '' - пустая строка?

vadiminfoЯ тоже за возможности. Потому Оракл выбрал. Но этой возможность предпочел бы не пользоваться до выяснения чего-то рационального в ней.
Давний пример в свете дилеммы "правильно" - "удобно" - использование from dual. Вы бы предпочли этим пользоваться или нет, если бы oracle позволял просто "select 1"?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728164
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Поскольку мне в техподдержку таковых жалоб не поступало, могу
авторитетно заявить, что "неразрешимая жопа" существует исключительно в
твоём воображении.

учитывая твою квалификацию (способность читать мануал по одной функции и возмущаться, что описание не работает на другой функции) у меня есть другая теория по чему к тебе не поступают жалобы.

хочешь что-то доказать, давай ссылку на проблему в оракле, а мы прикинем через какой ад пришлось пройти в firebird в той же ситуации
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728170
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавно, что все высказывающие здесь озабоченность "нелогичностью" и неудобствами Oracle имеют (судя по профилям) Oracle (скажем дипломатично) не самым основным рабочим инструментом.
Может ну его ... пусть ораклоиды или ораклисты (как вам угодно) сами плачут горючими слезами, работая в неудобном Oracle? Оставим кесарю кесарево, что вам до них???
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728176
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!....ссылку на проблему в оракле, а мы прикинем через какой ад пришлось пройти в firebird в той же ситуации
слово "ад" немного не по адресу, имхо, употреблено. FB по определению не может быть сложнее для разработчика или администратора.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728181
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoВ данном же случае рациональное от такой типа возможности ставится под сомнение, а гемор от контроля того что же в БД записалось NULL или '', и что это значит может вызывать озабоченность временами. Особенно напрягает вместо а IS NULL писть а IS NULL or a = ''. Это и читается плоховато и вообще.Нда, это как разговор со слепым о картинах :)
А гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0.
И вообще зачем тогда NULL нужен? Пусть пустая строка будет и всё, NULL не использовать и тогда не надо писать а IS NULL or a = '', достаточно только a = ''. Но можно NULL использовать, тогда будут дополнительные возможности, которых в оракле то и нет :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728192
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm
слово "ад" немного не по адресу, имхо, употреблено. FB по определению не может быть сложнее для разработчика или администратора.
а это определение с firebird когда нибудь работало ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728200
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperДавний пример в свете дилеммы "правильно" - "удобно" - использование from dual. Вы бы предпочли этим пользоваться или нет, если бы oracle позволял просто "select 1"?
Совершенно без разници как писать
Код: plaintext
1.
2.
 1 . select  1  from dual
 2 . select  1 
 3 . select  1  from rdb$database
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728216
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperПусть пустая строка будет и всё, NULL не использовать и тогда не надо писать а IS NULL or a = '', достаточно только a = ''. Почему-то все прицепились к строковым значениям а про числовые забыли. Ведь 0 не тоже самое что null.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728221
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!iscrafm
слово "ад" немного не по адресу, имхо, употреблено. FB по определению не может быть сложнее для разработчика или администратора.
а это определение с firebird когда нибудь работало ?
я не жалуюсь. есть конечно заморочки, но они значительно менее мешают чем у других.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728229
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.Pepperможно, как уже говорилось, isnull(str_attr, '') = '', символов не намного больше, чем str_attr is null.
"?
Ну звамена конструкции str_attr is null может и возможна. Но в целом это сути не меняет. Заменть '' во всех случаях ить не может - это не применимо, например, к числовым типам. Потому замена NULL пустой строкой вряд ли что даст. Вопрос зачем нужна '', кроме как сбить с толку все еще нуждается в разрешении, мне кажется.

Sgt.Pepper
А может пойти еще дальше, и строку, состоящую ТОЛЬКО из n пробелов также заненять на null, ведь временами и это вызывает озабоченность не меньшую, чем '' - пустая строка?

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


vadiminfoЯ тоже за возможности. Потому Оракл выбрал. Но этой возможность предпочел бы не пользоваться до выяснения чего-то рационального в ней.
Давний пример в свете дилеммы "правильно" - "удобно" - использование from dual. Вы бы предпочли этим пользоваться или нет, если бы oracle позволял просто "select 1"?[/quot]
Ну пердпочел бы, потому что должен быть from. Дело в единообразии (стль). Это проще запомнить, луче читать.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728253
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АвторСовершенно без разници как писать
Код: plaintext
1.
2.
 1 . select  1  from dual
 2 . select  1 
 3 . select  1  from rdb$database

Да? А у меня при 2. select 1:

Код: plaintext
1.
2.
ORA- 00923  FROM keyword not found where expected

Cause: In a SELECT or REVOKE statement, the keyword FROM was either missing, misplaced, or misspelled. The keyword FROM must follow the last selected item in a SELECT statement or the privileges in a REVOKE statement. 

Если не ошибаюсь, это в Oracle 9... Может, в последующих версиях уже по-другому?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728258
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperАвторСовершенно без разници как писать
Код: plaintext
1.
2.
 1 . select  1  from dual
 2 . select  1 
 3 . select  1  from rdb$database

Да? А у меня при 2. select 1:

Код: plaintext
1.
2.
ORA- 00923  FROM keyword not found where expected

Cause: In a SELECT or REVOKE statement, the keyword FROM was either missing, misplaced, or misspelled. The keyword FROM must follow the last selected item in a SELECT statement or the privileges in a REVOKE statement. 

Если не ошибаюсь, это в Oracle 9... Может, в последующих версиях уже по-другому?
Вы еще попробуйте 3-й вариант в Оракле запустить.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728271
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperА гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0.
Это что-то не доводилось так часто как а IS NULL or a = ''. В аксцессе мне приходится это делать. 0 все таки значение как и отрицательные числа большего смысла чем пустая строка.
SergSuper
И вообще зачем тогда NULL нужен?

Наверное за тем что это общее для всех типов. А то что свойство не задано может относиться к любым типам. Но '' выглядит как значение тока для строковых И 0 как значение для числовых. Мы с ними можем сравнивать и получать ЛОЖЬ или ИСТИНУ. А с NULL - НЕ ИЗВЕСТНО. Буржуа зря не придумает. Все там схвачено. Мы вряд ли что придумем тут. Четырехзначную и больше тоже давно придумали.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728346
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoВопрос зачем нужна '', кроме как сбить с толку все еще нуждается в разрешении, мне кажется.[..] Пустая строка это не просто строка символы которых мы не видим, это отсутсвие любых символов. Пробелы могут быть какой-то инфой в какой нибудь предметной области. .
Понимаете, тут Вы допускаете, что пробелы гипотетически могут быть какой-то инфой в какой-то предметной области, но примеров таких не приводите, считая, очевидно, Ваше утверждение и так достаточно убедительным аргументом. (Ну, говоря Вашими словами, что может означать 5 пробелов в поле ФИО?). А с пустой строкой говорите, что она кроме как сбить с толку нафиг не нужна, несмотря на то, что кто-то пытается приводить Вам конкретные примеры.

vadiminfoНу пердпочел бы, потому что должен быть from. Дело в единообразии (стль). Это проще запомнить, луче читать.
Пердпочел - это типа "скрепя сердце"? :)
Не могу сказать, что я принципиально с Вами не согласен, но это настолько субъективно выглядит, что утверждение "from не обязательно должен быть, from dual тяжелее запомнить и труднее читать" выглядит не менее убедительно в зависимости от опыта и предпочтений пишущего и читающего.
А вот аргумент, что FROM - это стандарт, который следует соблюдать, удобно нам это или нет, меня убеждает сильнее.
По мне так и с пустой строкой аналогично.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728364
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SallerSgt.PepperАвторСовершенно без разници как писать
Код: plaintext
1.
2.
 1 . select  1  from dual
 2 . select  1 
 3 . select  1  from rdb$database

Да? А у меня при 2. select 1:

Код: plaintext
1.
2.
ORA- 00923  FROM keyword not found where expected

Cause: In a SELECT or REVOKE statement, the keyword FROM was either missing, misplaced, or misspelled. The keyword FROM must follow the last selected item in a SELECT statement or the privileges in a REVOKE statement. 

Если не ошибаюсь, это в Oracle 9... Может, в последующих версиях уже по-другому?
Вы еще попробуйте 3-й вариант в Оракле запустить.
Меня интересовали первый и второй. Я Вас так понял, что в oracle они допустимы.
Или Вы имели в виду что-то файербердное?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728405
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperМеня интересовали первый и второй. Я Вас так понял, что в oracle они допустимы.
Или Вы имели в виду что-то файербердное?
1.Oracle, 2.MSSQL, 3.FB
У MSSQL конструкция некоторых вводит в замешательство :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728429
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
хочешь что-то доказать, давай ссылку на проблему в оракле, а мы прикинем
через какой ад пришлось пройти в firebird в той же ситуации

Ну давай, попробуем. Вот проблема:
/topic/750411
Какой ад ждёт желающего realtime репликацию из нескольких баз в одну в
случае Firebird?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728435
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SallerУ MSSQL конструкция некоторых вводит в замешательство :)

Ну, как бы зачем писать FROM, если выборка из "неоткуда"?! Достаточно открыть документацию:

BOL->FROM clause

In the SELECT statement, the FROM clause is required except when the select list contains only constants, variables, and arithmetic expressions (no column names) .
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728454
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SallerУ MSSQL конструкция некоторых вводит в замешательство :)
Есть возможность добавить в базу табличку dual, состоящую из одной строки и соответствовать в этом вопросе oracle, не вводя никого в замешательство. Но в MS решили, что можно так и не делать, т.к. размышляли, похоже, примерно так:
Softwarerможет быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728458
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Ну давай, попробуем. Вот проблема:
/topic/750411
Какой ад ждёт желающего realtime репликацию из нескольких баз в одну в
случае Firebird?

по зависимостям значит слив можно фиксировать или поднатужишься ?

ЗЫ. эмулировать функционал Oracle Streams Replication в субд с одним из самых слабых диалектов в индустрии и без лога кроме адом не назовешь имхо.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728481
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
по зависимостям значит слив можно фиксировать или поднатужишься ?

Слив Оракула - да, можно фиксировать. Ни ты ни Глюк не собрались с духом
показать результаты работы тестового скрипта. ЧиТД.

Yo.!
ЗЫ. эмулировать функционал Oracle Streams Replication в субд с одним из
самых слабых диалектов в индустрии и без лога кроме адом не назовешь имхо.

Да, эмулировать несостоятельности стримов могло бы быть адом. К счастью,
в отличие от PG никто не спешит эмулировать большого брата, так что
realtime multimaster репликация для Firebird просто работает.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728531
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperНда, это как разговор со слепым о картинах :)
Безусловно. "Мне кажется, эти картины - что-то нелогичное" :)

SergSuperА гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0
И часто Вам приходится такое писать? Можно пару примеров из бизнес-логики?

SergSuperИ вообще зачем тогда NULL нужен? Пусть пустая строка будет и всё, NULL не использовать и тогда не надо писать а IS NULL or a = '', достаточно только a = ''.
Да, делать все строковые поля not null - первое инстинктивное желание при использовании такого вот "стандартного" сервера. Но есть одна проблема: если поступить так, начнутся "грабли" с неправильно написанными join-ами по строковым полям (аналогичные граблям, которые заводят отдельные "умные" проектировщики, закладывающие в таблицы запись с id=0 и смыслом "отсутствующая"). Поэтому, в зависимости от смысла поля, и начинаются: data varchar not null, data varchar check (data <> ''), data varchar not null check (data <> '')... и про каждое помнить... и с каждым работать сообразно его области значений...

SergSuperНо можно NULL использовать, тогда будут дополнительные возможности, которых в оракле то и нет :)
И на которые мы вдвоём накопали один пример реального применения...

SallerПочему-то все прицепились к строковым значениям а про числовые забыли. Ведь 0 не тоже самое что null.
Дык именно поэтому предложение отождествить 0 с null звучит только в момент перехода от искреннего непонимания к откровенной демагогии, да и то обычно не очень уверенно.

Sgt.PepperПонимаете, тут Вы допускаете, что пробелы гипотетически могут быть какой-то инфой в какой-то предметной области, но примеров таких не приводите, считая, очевидно, Ваше утверждение и так достаточно убедительным аргументом. (Ну, говоря Вашими словами, что может означать 5 пробелов в поле ФИО?). А с пустой строкой говорите, что она кроме как сбить с толку нафиг не нужна, несмотря на то, что кто-то пытается приводить Вам конкретные примеры.
Я бы заметил, что совершенно стандартным (имхо) решением уровня фреймворка является trim() строковых данных при их вводе в БД. До тех пор, пока мы не собираемся хранить тексты программ на Whitespace, "пять пробелов" имеют единственный смысл - мусорить в данных.

Sgt.PepperНе могу сказать, что я принципиально с Вами не согласен, но это настолько субъективно выглядит,
Субъективно, безусловно. На мой взгляд, конструкция без from хороша в том месте, для которого её придумывали - то есть

Код: plaintext
select @a =  1 

Уже не очень хороша в запросе вида

Код: plaintext
select level connect by level <=  10 

И совсем плоха в запросе вроде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
from
  (select a, b, c 
   from some_table
   where a >  10 
   and b <  100 
   union all
   select  1 ,  2 ,  3 
   where trunc (sysdate) > trunc (sysdate, 'MM'))
where
  c like '%'

Sgt.PepperА вот аргумент, что FROM - это стандарт, который следует соблюдать, удобно нам это или нет, меня убеждает сильнее.
Хм. Для сержанта такая точка зрения, в общем, ожидаема ;-) Устав и два наряда вне очереди.

Про стандарты и "следует соблюдать", если мне не изменяет память, было написано у Макконнела, примерно так: "Однажды Ахмед рассказал своей жене семейный рецепт приготовления очень вкусного мяса: нужно взять кусок говядины, обрезать края, промариновать, засыпать специями и жарить до готовности на медленном огне. Жена спросила: А зачем обрезать края? "Не знаю,- ответил Ахмед,- моя мама всегда так делала, надо спросить у неё". Пошёл и спросил. "Не знаю,- ответила мама,- я делаю так потому, что так всегда делала бабушка, надо спросить у неё". Ахмед пошёл к бабушке и услышал: "Не знаю, зачем вы обрезаете края, а я обрезала их потому, что большой кусок мяса не влезал на мою единственную сковородку"" .
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728535
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Слив Оракула - да, можно фиксировать. Ни ты ни Глюк не собрались с духом
показать результаты работы тестового скрипта. ЧиТД.


ламаить :)

Dimitry Sibiryakov
Да, эмулировать несостоятельности стримов могло бы быть адом. К счастью,
в отличие от PG никто не спешит эмулировать большого брата, так что
realtime multimaster репликация для Firebird просто работает.


А кто сказал, что в Oracle репликацию можно делать только Stream-ом?
А вот Stream в FB придется искать очень пристально и долго
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728546
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Замечательно. Тот самый единственный пример. Наконец-то кто-то вспомнил про ситуацию "пустой пароль мы сохраняем и не запрашиваем повторно, а при отсутствии пароля - запрашиваем его у пользователя". Правда, для СУБД это очень редкая задача :)
Если переформулировать задачу как требуется отличать незаданные/неприменимые аттрибуты и аттрибуты, инициализированные дефолтными значениями , то возможно задача не окажется такой-уж и редкой
softwarer
Это уже не "конкретный пример", а некие абстрактные философствования с закольцованной логикой: "это нужно потому что может понадобиться для чего-нибудь".

это не абстрактные философствования, а слегка модифицированный пример задачи с моей прошлой работы. Автоматизировался склад инструмента, по ряду организационных причин, при занесении номенклатурного номера инструмента оператор не указывал его тип, а выбирал из списка доступных характеристик те, что понравились и присваивал им значения. После сохранения в БД, можно было отобразить/редактировать данные определенного инструмента, соответственно высвечивались только те значения, которым было что-то присвоено. Задача была решена по-другому, но одно из решений было сложить все поля в одну таблицу, а затем для искомого номера инструмента выбиралась-бы строка и разворачивалась pivot'ом (null'ы при этом-бы отсеивались). Некоторые значения вполне могли-бы оказаться пустой строкой и подлежать заполнению потом (вариант не заполнять ее вообще, а когда понадобиться вывалить список всех доступных характеристик для выбора представляется гораздо более плохим решением). Соответственно, при неразличимости null и пустой строки такой подход был-бы невозможен
softwarer
Если Вы работали и в той, и в другой реализации - с интересом выслушаю Ваше мнение о плюсах и минусах. Если же нет - подчеркну, что "кажется" не всегда выдерживает столкновение с реальностью.

это надо понимать так, что у вас есть продолжительный и плодотворный опыт работы с обоими системами?
softwarer
Кстати, я не увидел в приведённом примере дефолтных значений. Может быть, конечно, и такая реализация, но увидел я всего лишь умное поведение для случая obj = null, сродни классическому дельфовому

нет, в дотнет value типы по определению не могут быть null. Т.е. никаких if obj = null then быть не может по определению. В последних версиях появились nullable варианты этих типов, но это по-сути новые типы данных. Однако, видимо из подобных-же рассуждений об абстрактном удобстве для сферического программиста в вакууме, в vb возможно присвоение этим типам nothing, что в реальности приводит к получению ими дефолтных значений, а на деле может привести к серьезным багам
softwarer
О, это один из тех вопросов, который отличает "теоретиков" от "практиков". Первые уверены, что нетрудно. Вторые, написав этот isnull() несколько десятков, несколько сотен или несколько тысяч раз, начинают любить теории других теоретиков, где не нужно заниматься подобной тупизной.

я не знаю, где вы берете практиков, которые употребляют isnull() тысячами. Честно говоря, даже пример такой затрудняюсь придумать
softwarer
"Не то, к чему я привык" - вовсе не всегда "усложнение", часто наоборот.

"Не то, к чему я привык" - вовсе не всегда "удобство", часто наоборот.
softwarer
А в чём разница, если null - пустая строка? Заменить nvl на nvl2 - и всего делов-то. С другой стороны, когда null - не пустая строка, простейшее выражение вида name || patronymic || surname превращаются в нечто нечитаемое.

перепутали автора цитаты, на которую отвечали :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728565
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
А кто сказал, что в Oracle репликацию можно делать только Stream-ом?

Ну так пойди в тему по ссылке и осчастливь автора знанием - чем же в
Oracle можно сделать нужное ему, если Stream-ы облажались.

Gluk (Kazan)
А вот Stream в FB придется искать очень пристально и долго

Как и логи. Зачем там бесполезный прибамбас, который даже в Оракуле
работает в зависимости от фазы Луны?..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728567
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Слив Оракула - да, можно фиксировать. Ни ты ни Глюк не собрались с духом
показать результаты работы тестового скрипта. ЧиТД.

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

Dimitry Sibiryakov
realtime multimaster репликация для Firebird просто работает.

в этом и проблема - никому не нужна простая репликация для Firebird, но всем нужна не простая для оракла, которая выдерает изменения из лога не нагружая сервер и соответственно нормально масштабируется.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728581
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
SergSuperА гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0

И часто Вам приходится такое писать? Можно пару примеров из бизнес-логики?
ну наверное реже чем со строками, но тоже приходится
например считается задолженность как основной долг+начисленные проценты-погашенные проценты-погашение долга
операций по 3-м последним может не быть и сумма будет null


softwarer
SergSuperНо можно NULL использовать, тогда будут дополнительные возможности, которых в оракле то и нет :)
И на которые мы вдвоём накопали один пример реального применения...

я пару примеров привел
/topic/771770&pg=5#9062340
/topic/771770&pg=5#9063040
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728586
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Gluk (Kazan)
А кто сказал, что в Oracle репликацию можно делать только Stream-ом?

Ну так пойди в тему по ссылке и осчастливь автора знанием - чем же в
Oracle можно сделать нужное ему, если Stream-ы облажались.


А смысл?

Dimitry Sibiryakov
Gluk (Kazan)
А вот Stream в FB придется искать очень пристально и долго

Как и логи. Зачем там бесполезный прибамбас, который даже в Оракуле
работает в зависимости от фазы Луны?..


Затем же зачем и в Oracle :) Для маркетингу.
Звучит красиво, народу нравится
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728590
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
в этом и проблема - никому не нужна простая репликация для Firebird, но
всем нужна не простая для оракла

Ну тогда теперь твоя очередь рассказывать какая же репликация всем нужна
для Firebird, а я буду описывать ад, через который придётся пройти чтобы
её получить.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728600
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSЕсли переформулировать задачу как требуется отличать незаданные/неприменимые аттрибуты и аттрибуты, инициализированные дефолтными значениями , то возможно задача не окажется такой-уж и редкой
Во-первых, про "дефолтные значения" тут написано что-то.. имхо вообще не в тему. А вообще - ну дык называйте, смелее. Конкретные примеры. Чем больше, тем лучше. А то ради одного-двух случаев городить огород...

StalkerSа слегка модифицированный пример задачи с моей прошлой работы.

Задача была решена по-другому, но одно из решений было
Думаю, мы оба способны выдать немало причин, почему эту задачу не стоило решать таким образом. Собственно, посчитайте сами, сколько натяжек необходимо принять, чтобы счесть это серьёзным примером. Мне бы хватило одного только "тонкого момента" - пустые строки в значении "надо заполнить потом" почему-то есть, а вот для числовых характеристик ничего подобного нет, никакого null/пустой строки не используешь. А для перечислений - только если вносить в справочник "пустую строку", за что тоже стоит отрывать руки.

StalkerSэто надо понимать так, что у вас есть продолжительный и плодотворный опыт работы с обоими системами?
Существенно отличный от нуля.

StalkerSнет, в дотнет value типы по определению не могут быть null. Т.е. никаких if obj = null then быть не может по определению. В последних версиях появились nullable варианты этих типов, но это по-сути новые типы данных. Однако, видимо из подобных-же рассуждений об абстрактном удобстве для сферического программиста в вакууме, в vb возможно присвоение этим типам nothing, что в реальности приводит к получению ими дефолтных значений, а на деле может привести к серьезным багам
Если тип not null, то возможность присвоить ему null и происходящее при этом присвоение некоего "дефолта" - безусловно, плохое решение. Такая возможность иногда полезна, но пользоваться ей следует осознанно, а не "автоматом". В этой части решения я не вижу никакого соответствия обсуждаемой теме, поскольку not null колонке или переменной ни один сервер присвоить null вроде как не позволит.

В null.toString() == "" я в общем-то никакого криминала не вижу, скорее наоборот, полагаю разумным и удобным.

StalkerS"Не то, к чему я привык" - вовсе не всегда "удобство", часто наоборот.
Безусловно. Именно поэтому стоит пробовать и сравнивать фактический материал.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728610
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)А смысл?

Чтобы смелое заявление "в Oracle репликацию можно делать не только
Stream-ом" не осталось пердежом в лужу голословным.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728615
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Gluk (Kazan)А смысл?

Чтобы смелое заявление "в Oracle репликацию можно делать не только
Stream-ом" не осталось пердежом в лужу голословным.


ты не поверишь, до какой степени мне плевать на твои неумелые подначки
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728630
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer"пять пробелов" имеют единственный смысл - мусорить в данных.
Именно. Но если вдруг такое безобразие все-таки просочилось в текстовое поле в БД, то давайте его тоже считать за null, т.к. смысла в таком значении атрибута все равно никакого, а удобства в приведении к null - навалом. Это было бы логичным продолжением Вашей подмены '' на null, как мне показалось. VadimInfo, правда, допускает у пяти пробелов какой-то смысл в какой-то гипотетической предметной области.

softwarerХм. Для сержанта такая точка зрения, в общем, ожидаема ;-) Устав и два наряда вне очереди.
Честно говоря, не очень понял этот переход на личности.
Я имел в виду, что когда одному удобно правостороннее движение, другому левостороннее, третьей ездить на красный, т.к. у нее машинка красненькая, то, возможно, лучшим компромиссом для всех является принятие ПДД и их соблюдение.
Отказ от стандартов должен по хорошему иметь что-то более весомое, чем удобно-неудобно, и если Ваша (оракловая) фишка реально востребована и нужна, приводить к изменениям самого стандарта.
Никаких нарядов - где Вы разглядели? :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728638
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklin_модСтрока - набор символов. Нет символов - нет строки, т.е. null

Да щаз...
Код: plaintext
1.
2.
3.
4.
5.
6.
SQLWKS> select length('') from dual
      2 > 
LENGTH('')
----------
          
Выбрана  1  строка.
нету строки
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728650
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperну наверное реже чем со строками, но тоже приходится например считается задолженность как основной долг+начисленные проценты-погашенные проценты-погашение долга
операций по 3-м последним может не быть и сумма будет null
То, что "сумма будет null" - большая глупость стандарта, безусловно. Я уже давно говорю, что арифметические операции с null аргументами должны приводить не к null, а к exception.

Тем не менее, не очень понимаю, где Вы там собрались писать условие вида a is null or a = 0. То, что Вы написали, реализуется примерно так:

Код: plaintext
select debt + coalesce (interests,  0 ) - coalesce (paid_debt) - coalesce (paid_interests)

SergSuper я пару примеров привел
/topic/771770&pg=5#9062340
/topic/771770&pg=5#9063040
На один я уже высказался насчёт nvl2. Другой - меня смущает назначение платежа "пустая строка", но имхо это делается опять же иначе, причём вне зависимости от сервера и соглашения о пустых строках:

Код: plaintext
function GetDestination (p_Dest in out varchar) return boolean is\nbegin\n  return GetDestination1 (p_Dest) || GetDestination2 (p_Dest) || GetDestination3 (p_Dest);\nend;
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728667
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Ну тогда теперь твоя очередь рассказывать какая же репликация всем нужна
для Firebird, а я буду описывать ад, через который придётся пройти чтобы
её получить.

та которая осилит репликацию задачи типа TPC-C под нагрузкой хотя бы 50к tps
так, что с зависимостями - очередная газификация лужи окончена или еще будут попытки ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728702
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperИменно. Но если вдруг такое безобразие все-таки просочилось в текстовое поле в БД, то давайте его тоже считать за null,
(пожимая плечами) Мне, в общем, безразлично. Если сервер начнёт trim-ать значения в строковых полях - я, пожалуй, сочту это вполне удобным (включая все последствия, например, срабатывание not null на пяти пробелах).

Sgt.PepperVadimInfo, правда, допускает у пяти пробелов какой-то смысл в какой-то гипотетической предметной области.
Я обозначил такую предметную область - хранение программ на whitespace. Другой, честно говоря, не готов вообразить.

Sgt.PepperЧестно говоря, не очень понял этот переход на личности.
Считайте не очень удачной шуткой без какого-либо желания вызвать отрицательные эмоции.

Sgt.PepperЯ имел в виду, что когда одному удобно правостороннее движение, другому левостороннее, третьей ездить на красный,
То до тех пор, пока они ездят каждый по своей дороге, "стандарт" им, в общем, нафиг не нужен.

Sgt.Pepperто, возможно, лучшим компромиссом для всех является принятие ПДД
Возможно, конечно. Но далеко не факт. В Израиле, например, в шаббат дорожное движение... существенно уменьшается. Для них это, полагаю, вполне оправданно. Скажите пожалуйста: Вы хотите, чтобы в правила было внесено ограничение на поездки в автомобиле по пятницам и субботам? Только ради того, чтобы все соблюдали единый стандарт?

Sgt.PepperОтказ от стандартов должен по хорошему иметь что-то более весомое,
Для начала, введение стандарта должно быть обосновано чем-то весомым. Не надо начинать с середины

Я бы сказал так: лучше никакого стандарта, нежели плохой стандарт. Тому, который есть - до хорошего ещё очень далеко. Поэтому я приветствую оправданные отступления от него.

Sgt.Pepperи если Ваша (оракловая) фишка реально востребована и нужна, приводить к изменениям самого стандарта.
Я согласен с этим как с частью идеального, правильного подхода, но, к сожалению, мерзкие политические соображения вряд ли приведут к возможности такого подхода в обозримом будущем. Стандарт формируется политикой не меньше, чем технологией, и в свою очередь является политическим инструментом. В результате это - нежизнеспособная хрень имени декларации добрых намерений. Мне вот до сих пор интересно, есть ли хоть один сервер, в котором реализована прописанная в стандарте конструкция except (со смыслом ораклового minus).
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728721
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
та которая осилит репликацию задачи типа TPC-C под нагрузкой хотя бы 50к tps

Не, писькомерятельской репликации для Firebird действительно не
существует. Но и через ад проходить не придётся, ибо некому.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728733
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerМне вот до сих пор интересно, есть ли хоть один сервер, в котором реализована прописанная в стандарте конструкция except (со смыслом ораклового minus).
MSSQK )
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728738
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerSergSuperну наверное реже чем со строками, но тоже приходится например считается задолженность как основной долг+начисленные проценты-погашенные проценты-погашение долга
операций по 3-м последним может не быть и сумма будет null
То, что "сумма будет null" - большая глупость стандарта, безусловно. Я уже давно говорю, что арифметические операции с null аргументами должны приводить не к null, а к exception.
а там нет арифметических операций с null-ами, там просто данных нетsoftwarer
Тем не менее, не очень понимаю, где Вы там собрались писать условие вида a is null or a = 0. То, что Вы написали, реализуется примерно так:

Код: plaintext
select debt + coalesce (interests,  0 ) - coalesce (paid_debt) - coalesce (paid_interests)

ну собственно я и "a is null or a = 0" не писал - вместо этого coalesce (a, \'\') softwarer
SergSuper я пару примеров привел
/topic/771770&pg=5#9062340
/topic/771770&pg=5#9063040
На один я уже высказался насчёт nvl2.это хуже - первую переменную надо два раза писать
softwarerДругой - меня смущает назначение платежа "пустая строка"
я там несколько всё упростил - на самом деле есть шаблон назначения платежа, в нем есть некие идентификаторы (не знаю как правильно назвать), которые должны заменяться значениями функций
т.е. это не должно смущать
softwarer, но имхо это делается опять же иначе, причём вне зависимости от сервера и соглашения о пустых строках:

Код: plaintext
function GetDestination (p_Dest in out varchar) return boolean is\nbegin\n  return GetDestination1 (p_Dest) || GetDestination2 (p_Dest) || GetDestination3 (p_Dest);\nend;
нет, так не пойдёт - если первая функция что-то вернула, то этот результат и возвращается, если ничего не вернула - то считается следующая функция
а вернуть она может пустую строку и это должен быть окончательный результат
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728760
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_мод
Код: plaintext
1.
2.
3.
4.
5.
6.
SQLWKS> select length('') from dual
      2 > 
LENGTH('')
----------
          
Выбрана  1  строка.
нету строки

Код: plaintext
1.
2.
3.
4.
5.
select len(''), LEN(NULL)

----------- -----------
 0            NULL

( 1  row(s) affected)

И?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728793
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperну собственно я и "a is null or a = 0" не писал
Значит, кто-то где-то потерял контекст разговора :) Потому как я спрашивал именно про такую конструкцию и Вы ответили "не так часто, как со строками, но приходится".

SergSuperэто хуже - первую переменную надо два раза писать
Это "хуже" сполна компенсируется отсутствием nvl-ей в выражениях вида a || b.

SergSuperнет, так не пойдёт - если первая функция что-то вернула, то этот результат и возвращается, если ничего не вернула - то считается следующая функция а вернуть она может пустую строку и это должен быть окончательный результат
Прошу прощения, сейчас кодирую на Java и недопереключился :) Имелось в виду

Код: plaintext
1.
2.
3.
function GetDestination (p_Dest in out varchar) return boolean is
begin
  return GetDestination1 (p_Dest) or GetDestination2 (p_Dest) or GetDestination3 (p_Dest);
end;

Надеюсь, так - вопросов не возникнет.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728854
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЭто "хуже" сполна компенсируется отсутствием nvl-ей в выражениях вида a || b.таки значит есть что компенсировать?

softwarer
Код: plaintext
1.
2.
3.
function GetDestination (p_Dest in out varchar) return boolean is
begin
  return GetDestination1 (p_Dest) or GetDestination2 (p_Dest) or GetDestination3 (p_Dest);
end;

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

а насчет отсутствия nvl-ей в выражениях вида a || b - в принципе я согласен, логично было бы например ввести еще какое-нибудь сложение строк которое бы в null всё не превращало, например вместо плюса те же две палки
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728907
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperтаки значит есть что компенсировать?

в принципе я согласен, логично было бы например ввести еще какое-нибудь сложение строк которое бы в null всё не превращало,
Ну дык собственно в Oracle оно и введено :) Если же ставить вопрос как "стоит ли вводить две операции сложения строк, одна из которых превращает, другая нет, только ради того, чтобы сэкономить несколько символов в Вашем примере" - я бы наверное сказал таки, что не стоит. Багов будет больше, чем выгоды.

SergSuperто что выкрутиться всегда можно - кто ж с этим спорит
Я бы поспорил, кто "выкручивается". Передавать два значения в двух переменных по мне - нормально, решение по умолчанию, а вот запихивать, как Вы хотите, в одну переменную сразу и признак "значение найдено" и само найденное значение - хакерство, привет из тёмного прошлого, одного уровня с "если возвращается значение < 0, то это не Id, а код ошибки".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36728932
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperПонимаете, тут Вы допускаете, что пробелы гипотетически могут быть какой-то инфой в какой-то предметной области, но примеров таких не приводите, считая, очевидно, Ваше утверждение и так достаточно убедительным аргументом. (Ну, говоря Вашими словами, что может означать 5 пробелов в поле ФИО?). А с пустой строкой говорите, что она кроме как сбить с толку нафиг не нужна, несмотря на то, что кто-то пытается приводить Вам конкретные примеры.


Об убедительности я не думал. Скорей речь идет о сомнениях в пользе пустых строк, но только до выяснения обратного. Из всего что я знал, польза была как попытка их трактовать как свойство отсутвует. Отсутсвие символов, делает ее похожей на NULL - отсутствие значений для любых типов: не даром же их и отождествляют.

Примеры что приводили казались тоже искусственными или предназначеными для прогерства.

Ну 5 прробелов все же строка не пустая. И даже мож в какой-ить БД про шифорования или там еще какой может найти применение. Но даже если нет, то скорей всего, заменить ее луче чем то другим отличным от NULL, не связанным с отсутсвием. Мож и заменят чем-нить. Но видно это пока редкое явление.
Хотя Вы правы. С пол года назад прихоли парни консультироваться почему запрос не так работает в какой-то их БД. Были очень не довольны, уже чуть ли не волосы на себе рвали. Я почти сразу заподозрил пять пробелов, но все же не сходу. Пару минут был сбит с толку: по каким-то причинам они там не ожидались, но оказались.
А вот на пустые строки нарываюсь чаще. Я в Аксцессе все же реже. И иногда забываю про ловушку.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729123
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoНу 5 прробелов все же строка не пустая.а два? два пробела - пустая?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729126
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли сервер начнёт trim-ать значения в строковых полях - я, пожалуй, сочту это вполне удобным (включая все последствия, например, срабатывание not null на пяти пробелах).
Спасибо, Ваша позиция во всяком случае выглядит последовательной.

softwarerТо до тех пор, пока они ездят каждый по своей дороге, "стандарт" им, в общем, нафиг не нужен.

Для начала, введение стандарта должно быть обосновано чем-то весомым. Не надо начинать с середины

Я бы сказал так: лучше никакого стандарта, нежели плохой стандарт. Тому, который есть - до хорошего ещё очень далеко. Поэтому я приветствую оправданные отступления от него.

Я согласен с этим как с частью идеального, правильного подхода, но, к сожалению, мерзкие политические соображения вряд ли приведут к возможности такого подхода в обозримом будущем. Стандарт формируется политикой не меньше, чем технологией, и в свою очередь является политическим инструментом. В результате это - нежизнеспособная хрень имени декларации добрых намерений.
Я с Вами не совсем согласен, но это спор более мировоззренческий, чем айтишный.
Не питаю иллюзий - стандарты зачастую являются более бюрократическими, чем техническими решениями, однако, в общем случае, считаю, что "лучше плохо ехать, чем хорошо стоять" и энергию технарей лучше пытаться направить на их изменение, чем на откровенную анархию типа "а никто не доказал мне, что ПДД обосновано чем-то весомым, потому считаю правильным чихать на них нах", тем более, что достоверно знаю, что этот знак "40" только вчера поставили, чтобы срубать с меня деньги. Коли они так - то и я поеду 160!

softwarerВ Израиле, например, в шаббат дорожное движение... существенно уменьшается. Для них это, полагаю, вполне оправданно. Скажите пожалуйста: Вы хотите, чтобы в правила было внесено ограничение на поездки в автомобиле по пятницам и субботам? Только ради того, чтобы все соблюдали единый стандарт?
Извините, я уже Вам некоторое время назад говорил, что аналогии и аллегории должны иллюстрировать высказанный тезис, а не являться сами по себе основой доказательства чего-то, о чем нужно догадываться путем интерпретаций этих аналогий, иначе мы с Вами рискуем упереться в то, что Ахиллес никогда не догонит черепаху.

Я хочу сказать что:
Вариант 1. Проверка str_attr is null вернет только null, а не ''. Вариант, ненужность которого должны доказать Вы, а не говорить, что "пока что серьезных примеров не приведено - это никому не нужно".
Вариант 2. str_attr is null вернет не только null, но и ''. Вариант, который Вам кажется оптимальным.
Достигается в oracle, если верить Вадиму, детипизацией '' в null.
Вариант 3. str_attr is null вернет не только null, но и всякие расширения "мусора в текстовом поле, которые легко формализуются как "мусор" типа набора пробелов. Вариант, который Вам кажется также вполне приемлимым, но, похоже, не всем ораклистам.

Так почему бы не пойти по пути осмысленного выбора программистом?
1. str_attr is null
2. isnull(str_attr, '') = ''
3. isnull(trim(str_attr), '') = ''

Ну возможно, придется Вам написать пару лишних символов по варианту 2 или 3, которые Вы бы не хотели писать, но зато сохранится возможность для других использовать в конкретном случае конкретный вариант, да и стандарты не нарушим.
Неужели плата так велика?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729176
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорvadiminfoНу 5 прробелов все же строка не пустая.а два? два пробела - пустая?
Ну если смотреть в сторону арифметических подходов, то нужна повышеная осмотрительность.
Если проявлять приемлемую обеспокоенность по поводу возможной чрезмерной иррациональности пустой строки в сильно типизированных моделях данных то , скорее всего, можно предположить с разного рода оговорками, что и два пробела для пустй многовато будет. По видимому, одна тысячная пробела может в ряде случаев отдельными исследователями рассматриваться как некоея приближение оного в некоторых тестах для полуструктурированных МД..
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729197
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoНу если смотреть в сторону арифметических подходов, то нужна повышеная осмотрительность.
Если проявлять приемлемую обеспокоенность по поводу возможной чрезмерной иррациональности пустой строки в сильно типизированных моделях данных то , скорее всего, можно предположить с разного рода оговорками, что и два пробела для пустй многовато будет. По видимому, одна тысячная пробела может в ряде случаев отдельными исследователями рассматриваться как некоея приближение оного в некоторых тестах для полуструктурированных МД..
Имелось в виду, что и пустая строка и строка из 2-5 пробелов создают практически идентичную проблему в смысле отсутствия смысла в такой инфе в поле ФИО. Так почему, решая проблему с пустой строкой путем автоматического преобразования ее сервером к null, не поступать так же и с полем из пробелов? А далее и с любым другим набором символов - "как нам кажется строковым мусором", который удастся формализовать?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729216
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperИмелось в виду, что и пустая строка и строка из 2-5 пробелов создают практически идентичную проблему в смысле отсутствия смысла в такой инфе в поле ФИО. Так почему, решая проблему с пустой строкой путем автоматического преобразования ее сервером к null, не поступать так же и с полем из пробелов? А далее и с любым другим набором символов - "как нам кажется строковым мусором", который удастся формализовать?
Возможно, кроме ФИО есть другая инфа, где не пустые строки могут иметь смысл. Но ведь в любом случае в них не отсутсвуют символы. Т.е. если ее чем-то и стоит заменять, то скорее всего не null - отсутсвие значения. Пустая строка - отсутсвие символов, ну близко к осутствию значения, но тем ни менее моно считать и значением. Как отсутсвие оно слабее null (тока строковый тип), а как значение не имеет особого смысла.
При замене с помощью null пробелов или еще чего там, что может не означать смысла никада, возможно, есть дополнительные риски. Наверное, там нужны какие-то исследования.
Но в целом Ваша идея лично мне кажется заманчивой. Возможно, тут вместо null подошло бы waste - мусор. Можно придумать типа пятизначную логику: Ложь, Истина, Не известно, Не определено, Мусор. Посмотреть есть ли от этого польза. А пустые строки пока выкинуть (не ясно что это, мусор, значения, и вообще), до выяснения новых обстоятельств.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729285
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sgt.Pepper
Имелось в виду, что и пустая строка и строка из 2-5 пробелов создают практически идентичную проблему в смысле отсутствия смысла в такой инфе в поле ФИО. Так почему, решая проблему с пустой строкой путем автоматического преобразования ее сервером к null, не поступать так же и с полем из пробелов? А далее и с любым другим набором символов - "как нам кажется строковым мусором", который удастся формализовать?
мое имхо потому, что вместо нулла веб клиент присылает именно пустую строку, лишая всякого смысла где-то дальше пытаться искусственно разъединить эти понятия ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729296
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно можно записать в varchar not null строку '' ?
Можно создать уникальный индекс по полю, где многократно встречаются '' ?

З.Ы.
Нет оракла под рукой (
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729307
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerSergSuperтаки значит есть что компенсировать?

в принципе я согласен, логично было бы например ввести еще какое-нибудь сложение строк которое бы в null всё не превращало,
Ну дык собственно в Oracle оно и введено :) Если же ставить вопрос как "стоит ли вводить две операции сложения строк, одна из которых превращает, другая нет, только ради того, чтобы сэкономить несколько символов в Вашем примере" - я бы наверное сказал таки, что не стоит. Багов будет больше, чем выгоды.нет, мои примеры такого не требовали
softwarerSergSuperто что выкрутиться всегда можно - кто ж с этим спорит
Я бы поспорил, кто "выкручивается". Передавать два значения в двух переменных по мне - нормально, решение по умолчанию, а вот запихивать, как Вы хотите, в одну переменную сразу и признак "значение найдено" и само найденное значение - хакерство, привет из тёмного прошлого, одного уровня с "если возвращается значение < 0, то это не Id, а код ошибки".да тут бесполезно спорить, кто как делает тот так и считает правильным
я вот напишу что аналогия неудачная и логичней когда вся информация о строке в ней и содержится, тем более что возможности для этого предусмотрены, Вы не менее обоснованно ответите

я вот частенько смотрю оракловский код и думаю насколько было проще если бы были нулы как у микрософта, уверен что Вы что-то подобное думаете про микросовтовский

мне такое поведение кажется уж очень очевидно неправильным и было интересно понять тех, кому это кажется нормальным
вроде понял, но "я думаю, Владимир Зенонович, последнее слово будет не за вами" :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729379
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Думаю, мы оба способны выдать немало причин, почему эту задачу не стоило решать таким образом. Собственно, посчитайте сами, сколько натяжек необходимо принять, чтобы счесть это серьёзным примером. Мне бы хватило одного только "тонкого момента" - пустые строки в значении "надо заполнить потом" почему-то есть, а вот для числовых характеристик ничего подобного нет, никакого null/пустой строки не используешь.

да там почти все параметры строковые. Даже размеры могли записываться как 23х67. В крайнем случае существует возможность записать число как строку из цифр. Да и дело тут не в том как "правильно" делать, а в том, что определенный подход становится недоступным. По сути сервер на ровном ограничил меня в выборе альтернатив.
softwarerВо-первых, про "дефолтные значения" тут написано что-то.. имхо вообще не в тему. А вообще - ну дык называйте, смелее. Конкретные примеры. Чем больше, тем лучше. А то ради одного-двух случаев городить огород...

что значит "городить огород", два примера есть, и есть общая формулировка случая. Вам сколько конкретных примеров надо?
В качестве бонуса - согласованое поведение системы, лично мне неудобно, когда система за меня решает что удобно, а что нет. Уж если продолжать мысль, то поведение vb.net в этом смысле более логично - там всем value типам присваивается не-null значение, это плохо, но хотя-бы последовательно
softwarerСущественно отличный от нуля.

кажется вы там страницу назад писали что-то про один проект или около того.. От нуля это конечно существенно отличается, но если занимает только малый процент об общего опыта, то неудивительно что кажется непривычным и "неудобным"
softwarer
Если тип not null, то возможность присвоить ему null и происходящее при этом присвоение некоего "дефолта" - безусловно, плохое решение. Такая возможность иногда полезна, но пользоваться ей следует осознанно, а не "автоматом". В этой части решения я не вижу никакого соответствия обсуждаемой теме, поскольку not null колонке или переменной ни один сервер присвоить null вроде как не позволит.

почему нет соответствия, аналогия очень даже существенная - при присвоении null на самом деле присваивается нечто "не-null", причем в оракле вообще похоже не определить, что именно там присваивалось
softwarer
В null.toString() == "" я в общем-то никакого криминала не вижу, скорее наоборот, полагаю разумным и удобным.

тут не понял, null.toString() вызовет исключение в любом случае по очевидным причинам, разница в компиляторах vb и c# в том, как они реагируют на присваивание null типам, которые не могут быть null
vadiminfo
Я имел в виду что не только в Оракле декомпозиция чаcто применяется для отсутсвующих свойст. Ну действительно, табла со свойствами, которых заведомо нет у сущностей, выглядит как некоея искажение отображения реальности в БД. И констатировал, что это ближе к NULL чем '', если декомпозицию не делать.

никакого искажения реальности нет, есть разные способы отображения реальности в модели. И иметь отсутствующие аттрибуты в таблице сущности вполне можно. И если сервер толкает меня к определенным решениям только на основе технической реализации, то это не есть хорошо
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729393
sn1251
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerЯ бы сказал так: лучше никакого стандарта, нежели плохой стандарт. Тому, который есть - до хорошего ещё очень далеко. Поэтому я приветствую оправданные отступления от него.

Но стандарты всё-же просачиваются в Оракл.
Давно ль хором декламировали: JOIN, CASE, WITH у нас нет и нахер не нужно
Глядишь и опция CONCAT_NULL_YIELDS_NULL появится.
softwarerМне вот до сих пор интересно, есть ли хоть один сервер, в котором реализована прописанная в стандарте конструкция except (со смыслом ораклового minus).
ещё 1
Код: plaintext
1.
2.
3.
4.
5.
6.
postgres=# select generate_series( 1 , 5 ) except (values( 2 ),( 4 )) order by  1 ;
 generate_series
-----------------
                1 
                3 
                5 
( 3  rows)

З.Ы. по теме:
Да, в некоторых областях оракл впереди всех.
Нет, гордится этим как своим достижением не стоит (даже если ты индус).
Нет, во все дыры пихать оракл нецелесообразно.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729428
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sn1251
Но стандарты всё-же просачиваются в Оракл.
Давно ль хором декламировали: JOIN, CASE, WITH у нас нет и нахер не нужно


Собственно я не слышал, чтобы говорилось, что JOIN или рекурсивный WITH не нужны (под предлогом того, что есть legacy конструкции), зато много слышал, что реализация того же JOIN в Oracle 9, к примеру, далека от идеала Кроме того, раньше не понимал, для чего может быть нужен INNER JOIN (серьезно столкнувшись с MySQL понял для чего ). Так что не нужно путать теплое с мягким.
Собственно позиция того о чем Вы говорите складывалась из двух пунктов:

1. 8i - у нас нет JOIN (если склероз не изменил), но мы особо не страдаем, поскольку (+) работает, да и выглядит лаконичнее (имея при этом некоторые ограничения в использовании)
2. 9i - JOIN есть, но работает так хреново, что лучше пользоваться (+)

На мой взгляд, это далеко не "у нас нет и нахер не нужно", да и пользователи других СУБД поступают ровно таким-же образом
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729429
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорМожно можно записать в varchar not null строку '' ?
Можно создать уникальный индекс по полю, где многократно встречаются '' ?


1. нет
2. можно. на пустые строки уникальность распространяться не будет
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729479
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорМожно можно записать в varchar not null строку '' ?
Можно создать уникальный индекс по полю, где многократно встречаются '' ?


Ну вот как бы по моим понятиям, Оракл '' не записывает в таблу, а записал значения отсутсвует null, поскоку запросы на = '' возвращают пустые строки, а на is null возвращают добавленное. Скрипты в ветке приводил.
Поэтому как бы инсерт в колонку varchar not null не долженн пройти. А что до индекса, то поскоку возможность занести '' как в Аксцессе не очевидна, то вопрос луче переформулировать.
Т.е. есть моно считать что в таблах Оракла в полях типа varchar значение '' обнаружить далеко не всем удается после многих попыток исертов и апдэйтов в плане запосов содержащих = '' или там LENGTH(а) = 0.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729485
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSникакого искажения реальности нет, есть разные способы отображения реальности в модели. И иметь отсутствующие аттрибуты в таблице сущности вполне можно. И если сервер толкает меня к определенным решениям только на основе технической реализации, то это не есть хорошо
Разные то они есть, и применить то можно, но нельзя быть довольным токой моделью, скорее всего. Ить это все равно что кмокингу одеть шапку ушанку, я думау. Я вседа честно старюсь говорить коллегам, что если не получилось избежать в модели таких изъянов. Луче этого никада не скрывать, и не делать вид что все хорошо.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729494
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев ФёдорМожно можно записать в varchar not null строку '' ?
Нет.

Зайцев ФёдорМожно создать уникальный индекс по полю, где многократно встречаются '' ?
Да.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729590
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Кроме того, раньше не понимал, для чего может быть нужен INNER JOIN
жесть конечно. В принципе понятно, почему те, кто видел только oracle и ничего больше, придерживаются таких странных взглядов, иногда кажущихся со стороны дикими. Ну и естественно все кажется уникальным.

p.s. Gluk (Kazan), Ваша цитата просто как пример. Ничего личного.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729643
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmGluk (Kazan)Кроме того, раньше не понимал, для чего может быть нужен INNER JOIN
жесть конечно. В принципе понятно, почему те, кто видел только oracle и ничего больше, придерживаются таких странных взглядов, иногда кажущихся со стороны дикими. Ну и естественно все кажется уникальным.

p.s. Gluk (Kazan), Ваша цитата просто как пример. Ничего личного.

Ага, только ты забыл спросить, почему inner join понадобился в MySQL :)
Это жесть куда большая, поверь
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729722
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЗайцев ФёдорМожно можно записать в varchar not null строку '' ?
Нет.

Зайцев ФёдорМожно создать уникальный индекс по полю, где многократно встречаются '' ?
Да.
т.е. в первом случае '' is not null, а во втором - очень даже is null
по-моему, это не совсем очевидно. ввс я не виду причин, по которым должно быть именно так, а не наоборот или ещё как-нибудь по-другому

З.Ы,
я всё ещё на тему наразличимости '' и null
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729731
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев Фёдор
бредsoftwarerЗайцев ФёдорМожно можно записать в varchar not null строку '' ?

Нет.

Зайцев ФёдорМожно создать уникальный индекс по полю, где многократно встречаются '' ?
Да.
т.е. в первом случае '' is not null, а во втором - очень даже is null
по-моему, это не совсем очевидно. ввс я не виду причин, по которым должно быть именно так, а не наоборот или ещё как-нибудь по-другому

З.Ы,
я всё ещё на тему наразличимости '' и null
пардон, не проснулся.
burn 0,5 рулит
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729794
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев Фёдор, burn жжот.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729897
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperЯ с Вами не совсем согласен, но это спор более мировоззренческий, чем айтишный.
Собственно, именно об этом я и говорил в шутке про сержанта :) Вопрос собственно в том, что "то ли стандарт вводится там, где действительно нужен", то ли "стандарт должен быть всегда, а отступления вводятся там, где действительно нужны". Если позволите, ещё один старый анекдот:

Немецкий фельдфебель взял отпуск и поехал на экскурсию в Париж. Остановился в гостинице, поужинал, поднялся к себе. Наступила ночь. От соседей слева раздалось:

- А-а, а-а.. Жан, любимый, помедленнее, не спеши так, а-а...

Чуть позже от соседей справа раздалось:

- А-а, Пьер, ну что же ты, быстрее, быстрее!, А-А!!

Фельдфебель в бешенстве вскочил, схватил стек, и, стуча поочерёдно в ту и другую стену:

- Все! Слушаю мою команду! Раз-два, раз-два, раз-два!!


Sgt.PepperИзвините, я уже Вам некоторое время назад говорил, что аналогии и аллегории должны иллюстрировать высказанный тезис, а не являться сами по себе основой доказательства чего-то,
Дык и иллюстрирую. Тезис о том, что люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов.

Sgt.PepperВариант, ненужность которого должны доказать Вы, а не говорить, что "пока что серьезных примеров не приведено - это никому не нужно".
Я могу обосновать ненужность этого варианта, но меня совершенно не устраивает декларируемая Вами постановка вопроса. Мы обсуждаем равноправные вариации некоторой концепции, поэтому доказывать должны в равной степени. Кроме того, я очень прошу не перевирать мои слова: я говорю, что потребность именно в такой реализации крайне редка, и вносимые ей минусы и неудобства несравнимо перевешивают редкие полезные случаи.

А обосновывается, собственно, просто. У человека есть довольно чёткое интуитивное понимание понятия "значение введено / значение не введено", соответствующее is not null / is null. Скажем, для тех же чисел 0, 1, 2, 1.2e8, 238.85(342) - примеры введённых значений, пустота - значение не введено, null. Он с ними удобно и естественно оперирует, как программист так и пользователь. И глядя на поле ввода, где может стоять ноль, а может ничего не стоять, особенно наглядно видна демагогичность предложения отождествить 0 и null.

Для строковых значений действует ровно то же самое восприятие, "Иванов" - значение введено, "" - значение не введено. И да, любой нормальный человек - то есть не-программист - считает, что "Иванов " = "Иванов", а " " = "". Мы пишем программы для людей, они должны вести себя ожидаемым для пользователя образом. Поэтому, пока нет существенных оснований поступать иначе, следует выбирать концепции, соответствующие модели мира, ожиданиям пользователей.

Программист вполне может держать в голове концепцию "есть null (воспринимаемый пользователем как пустота), есть пустая строка (воспринимаемая пользователем опять же как пустота) и есть непустые строки". Но в 99.99% случаев ему просто незачем это делать, это только лишнее неудобство на пустом месте, проявляющееся каждый раз, когда программисту надо сконкатенировать это поле, сджойнить его или получить в него ввод из интерфейсной формы. Реальную потребность в этой концепции лучше всего показывает факт повсеместного отсутствия визуальных компонент, способных наглядно показать пользователю отличные null и пустую строку или дать пользователю выбрать между тем и другим. В тех редких случаях, когда такое требуется, программисты рожают что-нибудь вроде edit-а "Password" с чекбоксом "Password is blank".

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

Sgt.PepperТак почему бы не пойти по пути осмысленного выбора программистом?
Давайте рассмотрим ситуацию в общем виде. У нас есть несколько вариантов поведения системного объекта. Реализуя объект, мы можем:

1. Обязать явно указывать вариант в каждом месте использования объекта (те альтернативы, которые Вы привели)
2. Обязать явно указывать вариант в каждом месте создания объекта (то есть в create table кроме null / not null указывать отношение к пустым строкам)
3. Выбрать единственный вариант и заставить, когда он не подходит, делать явную доработку руками (как сейчас в Oracle).

Для каждого из этих подходов можно привести примеры, когда он оптимален. На пальцах.. третий вариант оптимален тогда, когда этот выбранный вариант нужен кардинально чаще других. Второй - оптимален по мощи, но предъявляет высокие требования к программисту, довольно легко внести ошибку. Первый - допустим тогда и только тогда, когда выбор преподносится в явном виде (например, как обязательный параметр функции) и оптимален, когда нет явно доминирующего выбора.

Так вот, "осмысленный выбор" в данном контексте не устраивает меня в первую очередь из-за нарушения требования "в явном виде".

Sgt.PepperНу возможно, придется Вам написать пару лишних символов по варианту 2 или 3, которые Вы бы не хотели писать, но зато сохранится возможность для других использовать в конкретном случае конкретный вариант, ... Неужели плата так велика?
Плата здесь - не лишние символы, это мелочь. Плата здесь - это внесённые ошибки. Я видел довольно много технологий, постулировавших "а вот здесь программист должен написать вот так", и, несмотря на все оргмеры, видел кучу ошибок, проистекающих из "программист забыл написать" или "написал не так".

Возвращаясь к примеру с пробелами - можно сделать технологию вроде "программист обязан писать trim() для каждого поля во всех хранимках, вставляющих или обновляющих информацию в таблицах". И гарантированно - будут отлавливаться ошибки. Люди не роботы. Такие вещи надёжны только когда они работают "без участия программиста в каждом конкретном случае".

Sgt.Pepperда и стандарты не нарушим.
Это стоит ещё меньше, чем лишние символы, имхо.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729944
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайцев Фёдорт.е. в первом случае '' is not null, а во втором - очень даже is null
Да нет, в обоих случаях '' is null. Во всяком случае, так следует из написанного. Возможно, Вы подразумевали не то, что написали, конечно :)

Зайцев Фёдорпо-моему, это не совсем очевидно. я всё ещё на тему наразличимости '' и null
Видите ли в чём дело.... они физически неразличимы. У них одно представление в дампе БД. Поэтому найти пример, где они различимы, будет.... непросто
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729954
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729976
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
меньше писанины, проще код, более логично в современном мире веба.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36729978
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperда тут бесполезно спорить, кто как делает тот так и считает правильным
Я не вижу причин всерьёз спорить об этой детали в рамках нашей основной темы. Но и не сказал бы, что бесполезно - вполне себе содержательная тема для "программирования вообще".

SergSuperя вот частенько смотрю оракловский код и думаю насколько было проще если бы были нулы как у микрософта, уверен что Вы что-то подобное думаете про микросовтовский
Дык я, собственно, и прошу привести примеры такого кода, где "насколько бы проще". С nvl/nvl2 уже увидели. Пример nvl vs || я тоже уже привёл.

SergSuperмне такое поведение кажется уж очень очевидно неправильным
Неправильное - это либо "неудобное", либо "удобное, но всё равно неправильное, потому что Иван Иваныч сказал, идеология должна быть другой". Второй вариант - меня не вдохновляет :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730033
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSДа и дело тут не в том как "правильно" делать, а в том, что определенный подход становится недоступным. По сути сервер на ровном ограничил меня в выборе альтернатив.
(пожимая плечами) Вы не протестуете против того, что тип number представляет только действительные числа и не содержит мнимой части? По сути сервер на ровном месте ограничил Вас в выборе альтернатив.

StalkerSкажется вы там страницу назад писали что-то про один проект или около того..
Я делал проект на MSSQL, несколько раз работал с IB/FB-проектами, немного с MySQL и кроме того, довольно много возился с перекачками данных. При этом я никогда не пытался "приходить со своим уставом в чужой монастырь", каждый раз честно смотрел "как тут принято", пробовал работать именно так и искал ответы на вопрос "почему".

StalkerSто неудивительно что кажется непривычным и "неудобным"
Вы второй раз употребляете слово "кажется", на этот раз не по адресу.

StalkerSпочему нет соответствия, аналогия очень даже существенная - при присвоении null на самом деле присваивается нечто "не-null",
Плюньте в лицо тому, кто Вам сказал такую глупость. В оракле при присвоении null присваивается null. В том числе при присвоении пустой строки присваивается null. Соответственно, аналогия "при присвоении null присваивается не-null" - мягко говоря, неуместна.

StalkerSтут не понял, null.toString() вызовет исключение в любом случае по очевидным причинам,
Ну и плохо. Я уж думал, микрософт не поленился сделать получше.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730056
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730061
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerlockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии.
с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730069
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!lockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
меньше писанины, проще код, более логично в современном мире веба.
писанины если не ровно столько же, то меньше
И веба в момент принятия решение не было, тем более - современного.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730099
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
locky
писанины если не ровно столько же, то меньше
И веба в момент принятия решение не было, тем более - современного.
когда принимаются решения по критериям логично и удобно, не удивительно, что они совпадают. писанины гораздо меньше, читайте ветку - примеры даны.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730127
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockysoftwarerlockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии.
с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот
Меня радует уместная категоричность.

Поясняю: когда проектировали формат хранения, видимо, решили, что каждое значение имеет размер, чаще всего динамический, и соответственно решили хранить как [длина, байт1, байт2, ...]. Null решили хранить как значение длины 0, то есть в файле БД ему соответствует либо один байт (длина = 0), либо вообще ничего (если в конце строки). Когда реализовывали varchar, строку 'abcde', вполне естественно, решили хранить как [5, 'a', 'b', 'c', 'd', 'e']. И в этот момент "совершенно случайно" оказалось, что null и пустая строка хранятся физически одинаково, как [0].

Есть у меня подозрение, что на самом деле примерно так всё и было, а идеологии - дело более позднее.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730129
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
Ну как же? Значения могут не иметь не тока строуки. Т.е. null более общее для всех типов. Кроме того, оно типа не транслируется, а объявлентся что значения нет. Ну и так по мелочам. Там пустая строека типа похожа на 0 для числовых, но числовые тоже могут не иметь значения, даже 0. Тада если пустая строка отранслировалась сюда, то она не похожа становится на 0. А зачем это надо. Кроме того, пустая строка разными челами по разному понисается: для кого есть такое значение в плане там равенства, а для кого то нет. А с null таких заморочек вроде нет.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730174
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockysoftwarerlockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии.
с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот

Нет никакого "вместо". Технически это одно и тоже значение.
Как правильнее: "держать" A вместо A, или наоборот?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730204
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Нет никакого "вместо". Технически это одно и тоже значение.

Похоже, что действительно "техническое", хотя я не знаком глубоко со структурой форматов хранения типов данных в Oracle, но в MS SQL наличие значения NULL в поле определяется не значением поля, а NULL bitmap in row header (1 bit for each column in table; a 1 indicates that the corresponding column is NULL) . И для полей переменной длины место на странице данных в таком случае не выделяется.

ЗЫ. М.б. именно поэтому, для MS SQL '' и NULL - 'две большие разницы'.

ЗЫЗЫ. По этой же причине в MS SQL поле с типом данных bit, занимаемое 1бит на странице данных может иметь 3ри значения - 0, 1 и NULL.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730314
Фотография 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.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730333
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerlockysoftwarerlockyХм. а почему именно пустая строка транслируется в null?
Почему не наоборот - null в пустую строку?
Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии.
с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот
Меня радует уместная категоричность.

Поясняю: когда проектировали формат хранения, видимо, решили, что каждое значение имеет размер, чаще всего динамический, и соответственно решили хранить как [длина, байт1, байт2, ...]. Null решили хранить как значение длины 0, то есть в файле БД ему соответствует либо один байт (длина = 0), либо вообще ничего (если в конце строки). Когда реализовывали varchar, строку 'abcde', вполне естественно, решили хранить как [5, 'a', 'b', 'c', 'd', 'e']. И в этот момент "совершенно случайно" оказалось, что null и пустая строка хранятся физически одинаково, как [0].

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

про null bitmap уже написали
что касается же тех. реализации...
как мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null
оракл вроде как на сях писаный, не?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730378
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky
как мне кажетсо, для разработчиков было бы проще оперерировать именно со
строками нулевой длины, нежели со строками, которые могут быть null
оракл вроде как на сях писаный, не?

Сие не зависит от языка, а исключительно от разработчиков. MS SQL скорее
всего тоже на сях написан (а уж Firebird - наверняка), что им не мешает
корректно различать NULL и пустую строку.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730401
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
locky
как мне кажетсо, для разработчиков было бы проще оперерировать именно со
строками нулевой длины, нежели со строками, которые могут быть null
оракл вроде как на сях писаный, не?

Сие не зависит от языка, а исключительно от разработчиков. MS SQL скорее
всего тоже на сях написан (а уж Firebird - наверняка), что им не мешает
корректно различать NULL и пустую строку.

Значит в команде разработчиков Оракла, видимо, человек, ответственный за реализацию строковых данных был несколько.. Инако? Альтернативно? Мыслящ.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730413
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyпро null bitmap уже написали
null bitmap mssql-я никак не связан с техническими удобствами разработчиков Oracle.

lockyкак мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null
Я полагаю, что это далеко не факт (для примера можно, скажем, упомянуть о необходимости контролировать ограничение на длину varchar-переменных), и совершенно уверен, что представление об "оперировать", возникающее сейчас, кардинально отличается от того, что было в первых ораклах в семидесятых годах, когда не было ни PL/SQL, ни большей части возможностей SQL.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730416
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyЗначит в команде разработчиков Оракла, видимо, человек, ответственный за реализацию строковых данных был несколько.. Инако? Альтернативно? Мыслящ.
Вообще-то Oracle изначально был написан на ассемблере.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730466
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какая хорошая философская темка )) И про FB и пустые строки. Я про пустые строки.

Совершенно очевидно, что Oracle сегодня, скажем урощённо, лучшая субд. И всё же. Совершенно очевидно, что считать пустую строку как NULL не правильно. Так же не правильно как и считать строку с пробелом тоже как NULL. NULL - значение не задано (возможно, потому что неизвестно). '' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL. В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно!

Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО. Есно идеальных систем всё проверяющих не существует, но к ним стремятся. А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои).

PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности? А чек-констреинты зачем?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730522
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxИ всё же. Совершенно очевидно, что считать пустую строку как NULL не правильно.
Как говаривал один мой мудрый друг, "если попробовать доказать очевидный факт - он часто становится вовсе не очевидным, а иногда - вовсе и не фактом".

web_fox'' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL.
А она у кого-то выдаёт null? Выбросьте бяку.

web_foxВ-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно!
Особенно операция join on (a.id = b.id)

web_foxСчитаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО.
Безусловно. Далее, "хорошая среда разработки" - та, которая помогает разработчику легко и правильно решать актуальные задачи, "плохая" - та, в которой ему надо предпринимать кучу дополнительных действий для хорошего решения той же задачи.

web_foxА идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои).
Хорошая фраза.

web_foxPS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности?
Нормальные люди - проверяют. Точнее, нормальные люди trim()-ают строки на уровне фреймворка, благодаря чему "строки из пробелов" отсекаются проверкой на not null, что серверной, что клиентской.

web_foxА чек-констреинты зачем?
Для реализации относительно сложных и нестандартных проверок, которые не реализуются более простыми средствами. Скажем, можно написать check (field is not null), но нормальные люди используют для этого not null в декларации поля.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730554
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox Совершенно очевидно, что считать пустую строку как NULL не правильно. Так же не правильно как и считать строку с пробелом тоже как NULL.

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


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

Так она вролде и выдает
Код: plaintext
1.
select ' 1' || '' f from dual;
, как впрочем и NULL.

Код: plaintext
1.
select ' 1' || NULL f from dual;


web_fox
В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно!

Но разве не был прав Каперник когда пошел против очевидности (очевидно было что земля стоит на месте, а он сказал что крутится). Шуткэ.

Вот операции с NULL могут быть разными. Например, сравнение с NULL может возвращать НЕ известено что. В общем исключения совсем не очевидны: их и так полно.

web_fox
Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО. Есно идеальных систем всё проверяющих не существует, но к ним стремятся. А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои).

Он и может и вводит. Ну виноватых искать это как бы другое. Это пусть они там сами разираются как хотят. А то мы с Вами счас понапишем и бум сами во всем виноваты потом.

web_fox

PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности? А чек-констреинты зачем?
Не нравится пол дела. Не нравится, что не сразу понял, что это надо писать. Вот тока вчера в Аксцессе запрос, который много лет как использовался, вдруг выдал ноль записей на IS NULL, на = '' все записи таблы. О как блин.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730564
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не то скопировал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> 
SQL> select ' 1' || '' f from dual;
 
F
--
  1 
SQL> select ' 1' || NULL f from dual;
 
F
--
  1 
 
SQL> 
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730665
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
MSSQL
select 'A'+''   --A
select 'A'+null --NULL
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730685
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
FireBird
select 'A'||:P from rdb$database
:P = ''   --RESULT A
:P = NULL --RESULT NULL
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730705
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoне то скопировал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> 
SQL> select ' 1' || '' f from dual;
 
F
--
  1 
SQL> select ' 1' || NULL f from dual;
 
F
--
  1 
 
SQL> 


Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1. Рациональное мышление говорит, что так не бывает. Говоря техническим жаргоном, - это "КОСТЫЛЬ" в прямом его проявлении.

А вот это верно:
PostgreSQL 8.4.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44), 32-bit

авторSELECT '1 from dual' || NULL
----
NULL

Всё чётко, с точки зрения значения. Но. Так это явно ошибка в бизнес-логике. И должно быть исключение, чтобы программист перепроекторовал программу и сложение с <неизвестно чем> не применялось.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730773
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, как всенепременно известно, "костыль" рано или поздно "вылазит". И тут ничинается. Кто-то уславливается, что будем писать пробел, если "действительно пустая строка", кто-то два дефиса, кто-то по другому - как фантазия позволяет, у каждого свои "спец-символы".
Особенно это развито в веб-программировании с пустым значением в теге select. Так костыли начинают плодится и размножаться, потому, что если есть костыль в одном месте, нужно компенсировать его в другом - если NULL и '' одинаковые, то нужен ещё костыль - конкатенация не приводит к NULL(!). Любое исключение из правил порождает ещё пачку дополнительных исключений из правил.

"Костыль" сегодня не вылез - повезло, будем писать так и дальше. Например, в PHP костыли вылазят часто. В Oracle чуть реже, но это всё равно "костыль".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730898
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web_fox
Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1.

дико это путать конкотенацию с арифметическими операциями.
конкатинировать пустую строку и не получать нулл в результе это удобно и логично. а вот придумывать идиотские предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам.
думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730954
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.

И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730962
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinИ для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle...
Эта цитата присутствует в документации минимум 15 лет. Вполне вероятно, будет присутствовать и тогда, когда стандарт наконец перепишут в соответствии со здравым смыслом
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36730968
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklin
И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle...
точно не для меня, в отличие от большинства спорящих тут я оракловую документацию прочел
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731000
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
дико это путать конкотенацию с арифметическими операциями.
Не понял. Уточните, кто где что путает и причём тут я. Только содержательно, пожалуйста, чтобы чётко было понятно где такое произошло.

Yo.!
конкатинировать пустую строку и не получать нулл в результе это удобно и логично.
Это костыль, который понадобился, из-за совпадения пустой строки с NULL. Не путайте следствие и причину.

Yo.!
а вот придумывать предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам.
Заменять отсутствие адреса пустой строкой - плохое проектирование. Здесь согласен.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731055
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.

Костыль, который применяется в вебе, поможет ораклу, у которого такой же костыль. А что, логично, блин! 8-/ А действительно, пришло из гет-запроса NULL - что это, строка NULL или значение NULL? Логично, ничего не скажешь.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731061
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web_fox
Не понял. Уточните, кто где что путает и причём тут я. Только содержательно, пожалуйста, чтобы чётко было понятно где такое произошло.

"Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1." - вот тут вы путаете арфметическую операцию сложения, которая нигде не даст единицу, с конкотинацией строк, работу которой в оракле вам расжевывали.

web_foxЭто костыль, который понадобился, из-за совпадения пустой строки с NULL. Не путайте следствие и причину.

путаете только вы, реально же для людей такое поведение не кажется логичным, поэтому вы не найдете в гуе варианта где можно было представить оба этих понятия. люди не поймут им так не удобно. отсюда и гора ошибок регулярно приходиться правит в мсскл, когда в письмах исчезают целые абзацы потому что очередной новичек забыл перед конкотенации проверить на нулл.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731083
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строкуну если не веба, то сельского хозяйства. и если не развитие, то хотя бы спад
Yo.!
и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории. или не будет, как уже случалось в истории. или не будет такой фишки
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731127
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.врядли - в MS SQL 4.2 тоже было как сейчас в оракле, но вовремя сумели перейти
отсюда и остался атавизм set ansi_null
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731186
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperврядли - в MS SQL 4.2 тоже было как сейчас в оракле
Вот на это - очень хотелось бы увидеть достойный уважения пруфлинк....

SergSuper, но вовремя сумели перейти отсюда и остался атавизм set ansi_null
... потому что судя вот по этому, Вы плохо понимаете, о чём говорите.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731216
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxНу это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1.
Но ведь можно и так сказать: к строке '1' дописть ничего, пустоту получится '1'. Ведь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731234
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerSergSuperврядли - в MS SQL 4.2 тоже было как сейчас в оракле
Вот на это - очень хотелось бы увидеть достойный уважения пруфлинк....

SergSuper, но вовремя сумели перейти отсюда и остался атавизм set ansi_null
... потому что судя вот по этому, Вы плохо понимаете, о чём говорите.
ну по 4.2 документации я уже не найду

у меня была уверенность что пустая строка там превращалась в NULL, а сейчас что-то уже засомневался...
может и перепутал, 15 лет прошло всё-таки
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731293
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
отсюда и остался атавизм set ansi_null
Оно не про строки, оно про null != null, null=null...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731373
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoweb_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 км)", но можем для неинициализированного объекта "строка" вызвать метод "приклеить('некая строка')".

Итого:
Костыль. Кому-то удобный. Иногда вылазит боком.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731389
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web_foxОчевидно, что смешивать два разных свойства объекта по значению - это костыль.

боюсь, что без применения психотропных препаратов будет проблематично добиться такой очевидности.
имхо ваше умение увидеть свойство которого нет прекрасно иллюстрирует фильм ДМБ, когда один из нанюховшихся краски обращается к другому:
- суслика видиш ?
- нет
- и я нет, а он там есть ...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731391
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно где это вылазит боком. Да везде, где нужно различать между "пользователь задал значение" или "не задавал" касательно строк. Пример про ввод пароля уже приводили. Либо система бесконечно будет пользователя просить ввести пароль, а он будет вводить пустую строку, либо нужно будет иметь в таблице две колонки: булевую колонку "есть ли пароль" и текстовую "пароль". А там уже как решите, можно просить пользователя вводить пароль (пустую строку - просто нажать энтер), либо пускать сразу.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731392
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!,

чтобы не нюхать краску и не писать чушь про сусликов, прочитайте остальной текст - там объяснение, что все объекты должны вести себя одинаково и одинаково трактовать свойство isNull. Личная просьба: нечего написать по существу - не пишите.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731418
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web_foxвсе объекты должны вести себя одинаково и одинаково трактовать свойство isNull.

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

Личная просьба: не обижаться в момент когда столь самоуверенно используете "Очевидно"
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731422
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softwarerweb_fox'' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL.
А она у кого-то выдаёт null? Выбросьте бяку.
Ну судя по коду, приведенному VadimInfo '' при инсерте подменяется на null. Но далее этот null ведет себя как особенный null - типа null_by_emptystring + '1' = '1', а не null?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731439
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxYo.!
а вот придумывать предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам.
Заменять отсутствие адреса пустой строкой - плохое проектирование. Здесь согласен.
А я не совсем согласен. Используешь "плохое проектирование" - получи плохой продукт, используешь хорошее - наоборот, не повод серверу принимать за тебя решения, что нужно лишить строковой переменной ее законного значения. Более того, аппетит приходит во время еды - Softwarer согласен, что и ' ' можно заменить на null, а, продолжая эту логику, и @#ять твою м@ть можно было бы автоматом менять на null, если какие-то дураки используют oracle без соответствующих фреймворков, и если бы "слов немного, всего лишь пяток, но какие из них комбинации" легко бы формализовалась как мусор, типа '' или ' ', то хорошему серверу сам бог велел это делать.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731470
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Кстати, помимо академического спора, Вам не кажется практичнее прислушаться к таким рекомендациям в плане будущей совместимости?
Ведь разработчик сервера - он такой, скажет "мы частично потеряли совместимость, но были вынуждены это сделать в угоду соответствия стандартам". Будет ли Вам утешением тот факт, что "люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов." - не уверен.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731518
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperКстати, помимо академического спора, Вам не кажется практичнее прислушаться к таким рекомендациям в плане будущей совместимости?
Ведь разработчик сервера - он такой, скажет "мы частично потеряли совместимость, но были вынуждены это сделать в угоду соответствия стандартам". Будет ли Вам утешением тот факт, что "люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов." - не уверен.
Кажется и я:
1) с крайней осторожностью отношусь к NULL, тем более к пустым строкам и избегаю наскока это возможно. Однако, из сооброжений оптимальности NULL таки приходится использовать, но пустые строки в МД не использовал давно. Мож када-то на Аксцессе пытался, но как писал получились полумеры, в общем забил (зато они сами там нарисовываются время от времени).
2) В настоящее время смотрю на Оракловые БД так, что в таблах нет пустых строк, есть только NULL. Просто тупо из-за того, что проверить есть ли в БД '' не удается, значит использовать не могу. А для меня БД нужна тока ради извлечения инфы, а они типа у меня не извлекались пока. Считаю что '' заменяется на NULL в таблах и запросах, потому надеюсь, что и не придет в голову и пытаться использовать (может в коде хранимых процедур, но это типа не считается: код вторичен, поскоку в общем случае в будующем его проще поменять чем структуру и данные).
В силу обоих пунктов в МД у меня пустых строк нет пока, и использовать в голову, надеюсь, не придет. Поэтому все еще надеюсь, что с совместимостью трабл не должно быть. Но продолжаю стараться сохранять бдительность (но не повышенную.)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731613
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoВедь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения.Откройте любую книжку по РМД. NULL - это неопределенное значение . Интерпретация NULL как отсутствие значения, т.е. как вполне определенное специальное значение - ИМХО явная ошибка проектирования. И даже если считать допустимым использование NULL как спец. значение (что ИМХО бред), возможная интерпретация его как неопределенности остается в силе.
Именно поэтому конкатенация, как и любая другая операция с NULL значением, должна возвращать NULL. Строка + неизвестно что - это все равно неизвестно что, даже если вместо неизвестно чего м.б. пустая строка (а может и не быть). То же каксается замены вполне определенного пустого значения '' на неопределенный NULL. Так что Оракл допускает явное нарушение не только стандартов, но и реляционной аксиоматики.
ЗЫ. Кстати, в DB2:
Код: plaintext
1.
2.
3.
4.
values( ' 1' || null );
 1                                                                                                                                                    
----------------------------
-                                                                                                                                                   
   1  record(s) selected.
В смысле, тоже NULL.
Так что Oracle в этом плане - единственный извращенец.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731640
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer(пожимая плечами) Вы не протестуете против того, что тип number представляет только действительные числа и не содержит мнимой части? По сути сервер на ровном месте ограничил Вас в выборе альтернатив.

сервер много в чем ограничивает полет фантазии разработчиков. И одно дело когда он это делает вынужденно и совсем другое дело, когда это происходит ради сомнительных удобств.
softwarer
Ну и плохо. Я уж думал, микрософт не поленился сделать получше.
[/quot]
вот интересный случай, как среда разработки влияет на мирровозрение. Для меня доступ к методам неинициализированного обьекта - это очень грубый баг разработчика. Среда не должна скрывать такие баги, а просто обязана выкидывать исключение.
Дельфи получается тоже таким-же попустительством занимается? эх..
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731738
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 и пишу констрейн на значение типа
Код: plaintext
1.
(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:
Код: plaintext
1.
2.
3.
4.
values( ' 1' || null );
 1                                                                                                                                                    
----------------------------
-                                                                                                                                                   
   1  record(s) selected.
В смысле, тоже NULL.
Так что Oracle в этом плане - единственный извращенец.
Не знаю единственный или нет. Ну что если поменяет со времене, возражать не буду.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731745
Фотография Saller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnЗЫ. Кстати, в DB2:
Код: plaintext
1.
2.
3.
4.
values( ' 1' || null );
 1                                                                                                                                                    
----------------------------
-                                                                                                                                                   
   1  record(s) selected.
В смысле, тоже NULL.
Еще один пример в поддержку нула в результате
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731783
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В СУБД Caché пустая строка и NULL - это разные значения: NULL and the Empty String
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36731869
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 для любого типа.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732130
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnКстати, круче всего должно быть тем бедолагам, которые мигрируют на Оракл с чего-то еще - искать подобную багу "фичу" можно весьма вдумчиво, не веря своим глазам. Этак недолго и в дурку попасть :)ну не знаю, у меня проблем не было, во всяком случае пишу не из дурки :)

Favn... Но такого бардака и там не было, любая операция с NULL операндом, кроме is null, по определению возвращает NULL для любого типа.давайте не считать свою точку зрения единственно верной
это и к сторонникам оракла относится
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732195
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnНо раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что
(" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true.
Тут вы ошиблись уже в первом своем выводе, так как в Oracle
('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732467
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 одинаково, больше всего все это похоже на сделанную когда-то ошибку проектирования, наследуемую по причине совместимости.

Все таки здесь есть, возможно, эмоциональная составляющая. А мы же этого избегаем?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732485
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, с поддержкой стандартов у Oracle вообще довольно плохо.

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

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

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

(Ох, а уж что я думаю про Оракловский синтаксический анализатор SQL - лучше не в слух. Хотя, вроде бы, в 10ке от самых идиотских багов избавились).
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732505
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Хм, с поддержкой стандартов у Oracle вообще довольно плохо.

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

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

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

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

А с точки зрения табуретки - все люди на одно лицо :)
Давайте не путать поддержку стандартов Oracle-ом и ODBC-драйверами?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36732560
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyFavnНо раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что
(" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true.
Тут вы ошиблись уже в первом своем выводе, так как в Oracle
('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.

В oracle костылики и на этот случай есть, например, DECODE работает как (NULL=NULL)=TRUE
...
Рейтинг: 0 / 0
Все таки 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
Все таки Oracle впереди планеты всей!
    #36733301
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyВы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111".
'' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.
вот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733324
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Favn,

а в процедурном sqlpl в db2, что получается в результате конкатинации с нулл ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733603
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmвот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно.Причем здесь вера? Если я считаю, что человек порет чушь, я так и пишу. Если отдельные граждане никак не могут уяснить себе тот простой факт, что в Oracle null и пустая строка это одно и то же, то мне приходится быть не слишком вежливым дабы объяснить им это.
Заметьте, я ни в одном месте не написал того, что поведение Oracle в данном случае правильное, логичное и т.п.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733648
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreyiscrafmвот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно.Причем здесь вера? Если я считаю, что человек порет чушь, я так и пишу. Если отдельные граждане никак не могут уяснить себе тот простой факт, что в Oracle null и пустая строка это одно и то же, то мне приходится быть не слишком вежливым дабы объяснить им это.
Заметьте, я ни в одном месте не написал того, что поведение Oracle в данном случае правильное, логичное и т.п.

Ну вы не правы, да ещё и нахамили Favn. Что вы нахамили, думаю, понятно. А не правы вы в том, что человек не ведёт дискусию так оно или не так в оракле. Он считает, что это нелогичное поведение для любого языка программирования.

Возьмём любого программиста, не знакомомго с оракл, и попросим его ответить что выведет данный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE
    col1 VARCHAR2( 1 );
BEGIN
    col1 := '';

    IF (col1 = '') THEN
        dbms_output.put_line('Всё логично.');
    ELSIF
        dbms_output.put_line('Обломись.');
    END IF;
END;

Совершенно очевидно, что это КОСТЫЛЬ. Совершенно очевидно, что НЕЛОГИЧНЫЙ.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733657
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и возьмём любимое нами веб-программирование (PHP):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?

$a = '';

var_dump($a);

if( $a == '' )	echo	'Всё логично.';
else	echo	'Обломись.';

-----

string( 0 ) ""
Всё логично.

?>
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733667
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreyiscrafmвот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно.Причем здесь вера? Если я считаю, что человек порет чушь, я так и пишу. Если отдельные граждане никак не могут уяснить себе тот простой факт, что в Oracle null и пустая строка это одно и то же, то мне приходится быть не слишком вежливым дабы объяснить им это.
Заметьте, я ни в одном месте не написал того, что поведение Oracle в данном случае правильное, логичное и т.п.

Ну вот уважаемая редакция батьки Тома вам отвечает про "одно и тоже" по-английски:

батька ТомA ZERO length varchar is treated as NULL.

'' is not treated as NULL.

'' when assigned to a char(1) becomes ' ' (char types are blank padded strings).

'' when assigned to a varchar2(1) becomes '' which is a zero length string and a zero
length string is NULL in Oracle (it is no long '')
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733673
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: этот пост я удаляю, надеюсь понятно почему
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733686
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Я хотел сказать, что если кто-то думает, что '' и NULL одно и тоже. То Том Кайт мягко ответил им, что они ошибаются.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36733723
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnDimitry SibiryakovУгу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и
тут же побежал снимать not null атрибут со всех строковых полей.Угу, со всех. Включая ключевые
раз у них принято как постулат, что null и пустая строка в реальном мире идентичны, то это вполне логичное следствие. Оставляем столбцы как not null, а пользователя заставляем что-то писать в соответствующие столбцы (включая ключевые)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36734935
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSраз у них принято как постулат, что null и пустая строка в реальном мире идентичны, то это вполне логичное следствие. Оставляем столбцы как not null, а пользователя заставляем что-то писать в соответствующие столбцы (включая ключевые)
Возможно дело обстоит еще хуже (по крайней мере, если принимать Ваши постулаты): null и пустая строка существуют тока в компьютерном типа мире, а факты реального описываются знаками отличными от null и пустая строка.
Вот, возможно, Надо же все варианты учитывать, а не тока первые пришедшие в голову.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740487
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как прекрасно, что я открыл для себя этот форум. Что ж я делал раньше.
Фанатичность некоторых участников, конечно, просто зашкаливает... впрочем в этом можно увидеть плюс и возможность увидеть мир с другой точки зрения. Хуже уже когда человек абсолютно невосприимчив к аргументам, но с такими общение можно ограничивать несколькими постами. Ну это так... лирика.

Если честно пока прочитал только 5 страниц топика.
По поводу null и пустых строк:
Oracle:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> select 'hello'||'' val from dual union all select 'hello'||null from dual;

VAL
-----
hello
hello

 2  строк выбрано.

SQL> 
SQL> select  0 +null id from dual;

        ID
----------


 1  строка выбрана.
MS SQL:
Код: plaintext
1.
2.
select 'hello'+'' val union all select 'hello'+NULL

select  0 +null id
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
val
------
hello
NULL

( 2  row(s) affected)

id
-----------
NULL

( 1  row(s) affected)
По троичной логике, если неопределенность прибавляется к чему-то, то результат тоже неопределен. Как видно из 'hello'+NULL для Оракла - это не выполняется. В МС СКЛ результат более логичен.
Но черт возьми смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец! Не проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах.
Чем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740524
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, смотрю на 13-й странице та же тема.
Может уже было предложено, но
SergSuperвот простой пример
допустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет
если привязана надо писать "выплата 100 руб согласно договору №100", если нет - просто "выплата 100 руб"
если бы null не был бы пустой строкой, можно было бы просто написать
Код: plaintext
'выплата 100 руб '||nvl('согласно договору №'||dog_num, '')
мелочь, но удобно, приятно, облегчает жизнь и не вызывает острого желания выкинуть её нафиг

ну и сейчас, глядя на написанные тексты, я вижу много мест, которые можно было бы несколько упроститьну пишите так:
Код: plaintext
select 'выплата 100 руб '||nvl2(dog_num,'согласно договору №'||dog_num,null)
В чем проблема то? Это неудобно и неприятно?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740554
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopПо троичной логике, если неопределенность прибавляется к чему-то, то результат тоже неопределен.
Ну это Вы в троичной логике прибавляете неопределенность к строкам или числам. Однако, это все еще не достаточно распространенная пракатика. Например, операция сложения задана на множестве чисел. И такого элемента как неопределенность в этом множестве нет.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740628
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopО, смотрю на 13-й странице та же тема.
Может уже было предложено, но
SergSuperвот простой пример
допустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет
если привязана надо писать "выплата 100 руб согласно договору №100", если нет - просто "выплата 100 руб"
если бы null не был бы пустой строкой, можно было бы просто написать
Код: plaintext
'выплата 100 руб '||nvl('согласно договору №'||dog_num, '')
мелочь, но удобно, приятно, облегчает жизнь и не вызывает острого желания выкинуть её нафиг

ну и сейчас, глядя на написанные тексты, я вижу много мест, которые можно было бы несколько упроститьну пишите так:
Код: plaintext
select 'выплата 100 руб '||nvl2(dog_num,'согласно договору №'||dog_num,null)
В чем проблема то? Это неудобно и неприятно?уважаемый, давайте-ка Вы будете повнимательней читать, и поменьше растопыривать пальцы. ок?
больше проблем нет
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740723
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperуважаемый, давайте-ка Вы будете повнимательней читать, и поменьше растопыривать пальцы. ок?
больше проблем нетЯ даже не пытался растопыривать пальцы и не собирался никаким боком тебя оскорблять.
Ну раз у ж ты позволяешь себе высказываться в таком духе, то я замечу, что я акцентировал внимание на том, что топик еще целиком не прочел.
И ты в свою очередь читай внимательнее, любезный.
PS Нельзя было просто написать "уже было"?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740756
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЯ даже не пытался растопыривать пальцы значит мне показалось
dbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает...
...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!..
...чем демонстрировать свою узколобость...можно и из других топиков надергать
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740766
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто ЧСВ не правильно оценивается.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740776
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmпросто ЧСВ не правильно оценивается.
неправильно
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740859
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperdbms_photoshopЯ даже не пытался растопыривать пальцы значит мне показалось
dbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает...
...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!..
...чем демонстрировать свою узколобость...можно и из других топиков надергатьОк, постараюсь изменить стиль.
Я хотел сделать акцент на том, что мне одинаково успешно удается разрабатывать и на МС СКЛ и на оракле учитывая указанную особенность со строками. И я считаю её именно особенностью а не недостатком какой либо из этих двух СУБД. Если человеку эта особенность сильно мешает разрабатывать, то, я думаю, ему стоит искать проблему в себе а не в СУБД.
И, скажите, пожалуйста, Вы много новых и свежих мыслей почерпнули со страниц 5-13?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740888
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!а в процедурном sqlpl в db2, что получается в результате конкатинации с нулл ?А что там может получиться? В DB2 SQL и SQL PL исполняются одним процессом, без внешних VM. Естественно, результат тот же.
Код: plaintext
1.
2.
3.
4.
5.
CREATE FUNCTION ABCCONCAT( INSTR VARCHAR( 8 ) )
	RETURNS VARCHAR( 8 )
	NO EXTERNAL ACTION
F1: BEGIN
	RETURN 'ABC' || INSTR;
END
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
values( SH.ABCCONCAT( '' ) );
 1        
--------
ABC

values( SH.ABCCONCAT( NULL ) );
 1        
--------
-
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740894
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperdbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает...
...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!..
...чем демонстрировать свою узколобость...можно и из других топиков надергатьНадергайте. И с чем Вы не согласны с содержанием или стилем?
Я каждый из приведенных тезисов могу обосновать.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740972
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoНу это Вы в троичной логике прибавляете неопределенность к строкам или числам. Однако, это все еще не достаточно распространенная пракатика. Например, операция сложения задана на множестве чисел. И такого элемента как неопределенность в этом множестве нет.
Естественно, неопределенности в самом множестве чисел нет. Иначе она не была бы неопределенностью, которая есть возможность любого значение из этого множества.
А вот в арифметике неопределенность есть - это результат деления на 0, т.к. любое число * 0 = 0.
Точно так же во множестве строк нет неопределенности. А вот пустая строка в нем есть, и это вполне определенное значение, к неопределенности с точки зрения здравого смысла никакого отношения не имеющая. Как и 0 (отсутствие значения) в арифметике.
И любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен.
PS. Ну что Вы, право :) Троичную логику вроде не я придумал :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36740980
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopSergSuperdbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает...
...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!..
...чем демонстрировать свою узколобость...можно и из других топиков надергатьНадергайте. И с чем Вы не согласны с содержанием или стилем?здесь как бы принято возможности СУБД сравнивать, а не обсуждать мнения относительно участников дискуссии
ну и кроме того мне лично такой стиль общения кажется хамским, но это только моё личное мнение

dbms_photoshopЯ каждый из приведенных тезисов могу обосновать.это мало кому интересно
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741029
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshopНе проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах.
Чем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски.Речь тут не об особенностях конкретных СУБД, а о том, что в данном случае Оракл несовместим со всеми остальными РСУБД на уровне не расширений, а древних базовых конструкций. И эта "тонкость" мало того что внутренне противоречива, еще и делает затруднительной миграцию на/с Оракла в некоторых случаях.

А вещь сия как раз весьма интересна и лично мне не до конца понятна в свете:
web_foxбатька ТомA ZERO length varchar is treated as NULL.

'' is not treated as NULL.

'' when assigned to a char(1) becomes ' ' (char types are blank padded strings).

'' when assigned to a varchar2(1) becomes '' which is a zero length string and a zero
length string is NULL in Oracle (it is no long '')Понятно, что работает это только для varchar, не для char (уже бездна "логики").
Но правильно ли я понял, что '' на самом деле не есть null, а null просто записывается в поле varchar при присваивании ему ''? Но при этом в строковых операциях уже null ведет себя как ''?
Люди, знакомые с Ораклом, поможите разобраться, дайте сцылочку! В этой "локике" лично я запутался окончательно.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741203
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnПонятно, что работает это только для varchar, не для char (уже бездна "логики").
Но правильно ли я понял, что '' на самом деле не есть null, а null просто записывается в поле varchar при присваивании ему ''?
Ну, как тут написали, null записывается не только в поле типа varchar (при попытке записи ''), но так же и в поле типа int.
А в поле типа char - нет, не записывается null
Бездна логики (с)

Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?
Если '' не эквивалентно null (несмотря на все здешние убеждения), то почему оно вообще позволяет записать себя в int?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741219
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnПонятно, что работает это только для varchar, не для charДаже для полей типа char - пустая строка означает null:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SQL> create table a(x integer, y char( 1 ));
Table created.
SQL> insert into a values( 1 ,'');
 1  row created.
SQL> select * from a where y is null;
         X Y
---------- -
          1 
То же самое верно и для всех других типов. Можно без проблем вставить пустую строку в поле любого типа и в поле будет null. То же самое верно и с переменными в PL/SQL.
Исключением является именно присвание значения переменным типа char в PL/SQL коде. Зачем такое исключение сделано - не знаю. Более того в документации именно по PL/SQL об этом не сказано. Есть только общая фраза:
Код: plaintext
1.
A character literal with zero characters has the value NULL and is called a null string.
However, this NULL value is not the BOOLEAN value NULL.
На мой взгляд, выглядит так, что указанное отличие для CHAR - ошибка, исправлять которую ни у кого нет желания :)

ЛПЕсли '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?Именно, что пишется :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741240
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FavnА что там может получиться? В DB2 SQL и SQL PL исполняются одним процессом, без внешних VM. Естественно, результат тот же.
т.е. в дб2 процедуры на жава конкатенируют так, а sqlpl этак !?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741391
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!т.е. в дб2 процедуры на жава конкатенируют так, а sqlpl этак !?Не понял всей глубины мысли.
SQL PL - не язык общего назначения, это - встроенный язык DB2, являющийся расширением входящего в стандарт SQL/PSM. Его байт-код (если он есть, т.е. если SQL PL не подставляется inline в вызвавший его запрос) выполняется тем же процессом, что и собственно SQL - главным процессом инстанса (как, ксати, и PL/SQL - в DB2 оба языка компилячаться в один и тот же байт-код :) ).
Java - это язык общего назначения со своими правилами, ничего общего (кроме соотв. библиотек-пакаджей) с SQL не имеющий. Выполняется, конечно, на собственной VM, взаимодействуя с DB2 через один из 2-х типов драйверов. Естественно, конкатенация в SQL в JDBC и SQLJ выполняется по правилам SQL DB2. Естественно, конкатенация строк в Java выполняется по правилам Java, где null - вовсе не неопределенность, которой в core Java нет, а пустая ссылка.
Что в этом такого удивительного?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741452
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,
Уточню. Для Java SP/UDF используется только один тип драйвера - type 2, работающий через DB2-ного клиента (в отличие от type 4, писаного на самой Java и в клиенте не нуждающегося). При запуске на сервере (локальном коннекте) такой клиент работает напрямую со структурами памяти инстанса DB2.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741560
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyFavnПонятно, что работает это только для varchar, не для charДаже для полей типа char - пустая строка означает null:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SQL> create table a(x integer, y char( 1 ));
Table created.
SQL> insert into a values( 1 ,'');
 1  row created.
SQL> select * from a where y is null;
         X Y
---------- -
          1 
То же самое верно и для всех других типов. Можно без проблем вставить пустую строку в поле любого типа и в поле будет null. То же самое верно и с переменными в PL/SQL.
Исключением является именно присвание значения переменным типа char в PL/SQL коде.
Пардон, а если переменной типа char в PL/SQL коде присвоить значение null - что в этой переменной окажется?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741595
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FavnЕстественно, конкатенация в SQL в JDBC и SQLJ выполняется по правилам SQL DB2.
процедурный код сторед процедуры на SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе ...
именно это и странно, если не сказать шизофреничненько. если конкатенация идет в процедурном коде процедуры на SQLJ работает так, если в участке декларативного SQL той же процедуры, то этак. а здесь мы рыбу заворачивали (tm)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741614
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛППардон, а если переменной типа char в PL/SQL коде присвоить значение null - что в этой переменной окажется?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> set serveroutput on;
SQL> DECLARE
   2   	x CHAR( 2 );
   3   	v VARCHAR2( 100 );
   4   BEGIN
   5   	x :=  0 ;
   6   	SELECT to_char(dump(x)) INTO v FROM dual;
   7   	dbms_output.put_line(v);
   8   	x := '0';
   9   	SELECT to_char(dump(x)) INTO v FROM dual;
  10   	dbms_output.put_line(v);
  11   	x := '';
  12   	SELECT to_char(dump(x)) INTO v FROM dual;
  13   	dbms_output.put_line(v);
  14   	x := NULL;
  15   	SELECT to_char(dump(x)) INTO v FROM dual;
  16   	dbms_output.put_line(v);
  17   END;
  18   /
 
Typ= 96  Len= 2 :  48 , 32 
Typ= 96  Len= 2 :  48 , 32 
Typ= 96  Len= 2 :  32 , 32 
NULL
 
PL/SQL procedure successfully completed
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741620
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До кучи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> select dump(value) from
   2   (select cast( 0  as char( 2 )) value from dual
   3   union all
   4   select cast('0' as char( 2 )) from dual
   5   union all
   6   select cast('' as char( 2 )) from dual
   7   union all
   8   select cast(NULL as char( 2 )) from dual);
 
DUMP(VALUE)
--------------------------------------------------------------------------------
Typ= 96  Len= 2 :  48 , 32 
Typ= 96  Len= 2 :  48 , 32 
NULL
NULL
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741652
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,
Опять не понял. Какой-такой декларативный SQL в Java процедуре? Почему "SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе"?
В Java есть 2 способа работы с SQL - JDBC, т.е. динамический SQL, и SQLJ, т.е. статический SQL.
Насколько я помню, в Оракле SQLJ - просто синтаксический сахарок, преобразующийся в вызовы JDBC.
В DB2 это не так. SQLJ код прекомпилируется (до Java компилера) препроцессором DB2, при этом из текста запросы изымаются и сохраняются в БД в спец. "пакете" (и компилируются там уже как static SQL). В тексте программы остается фактически удаленный вызов некоей функции, с данным запросом связанной.
В любом случае, SQLJ ни в одной СУБД не выполняется JVM, которая об SQL вообще ничего не знает и знать не должна.
Где тут шизофрения? Все, что написано на SQL, будь то JDBC или SQLJ, выполняется в СУБД по правилам СУБД. Все, что написано на Java, выполняется JVM по правилам Java. В том числе и конкатенация.
Или Вы продолжаете считать, что "null" в SQL и в Java значат примерно одно и тоже? :)

PS. Кстати, а для SQLJ в Оракле при компиляции SP зависимости с объектами БД отслеживаются? Т.е. если потом в БД что-то фатально изменится, SP станет инвалидной? Или нет, как для динамики в JDBC?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741653
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn
Естественно, неопределенности в самом множестве чисел нет. Иначе она не была бы неопределенностью, которая есть возможность любого значение из этого множества.

Все еще допускаю, что ее там нет тока от того, что "Иначе она была бы неопределенностью, которая есть возможность любого значение из этого множества", но и была бы чем угодно.
Т.е. какую бы личину она не приняла, ее, скорей всего, там бы не было. Ну так уж сложилось, наверное, типа исторически. Ну, возможно, пользы от ея добавления не нашли.

Favn
А вот в арифметике неопределенность есть - это результат деления на 0, т.к. любое число * 0 = 0.

А может т.к. если бы на Луне жили люди, то на нас падали бы объедки, а этого не происходит?
Ить от того что любое число * 0 = 0 не следует, что на от деления на 0 должен быть результат, да еще и который есть неопределенность.
Обычно, там по неопределенностью понимается отсутсвие результата при делении: деление на 0 неопределено. В любом случае та неопределенность, "которая есть возможность любого значение из этого множества" похожа на перемнную, на которую таки можно делить, если она не равна 0. Вы знаете, что индоевропейские языки многозначны? Вы, скорее всего, используете термин "неопределенность" в разных смыслах в разных местах текста. От того так и получается: то оно похоже на переменную (известное значение), то она есть в арфметике результат деления на 0 (известно что не значение).
Кста, в ТФКП есть расширение допускающее деление на 0, оно обозначается символом бесконечность. Им нуно было назвать ее неопределенность? Тада бы Вы тут не про арифметику, а про ТФКП бы могли рассуждать.


Favn
Точно так же во множестве строк нет неопределенности. А вот пустая строка в нем есть, и это
вполне определенное значение, к неопределенности с точки зрения здравого смысла никакого отношения не имеющая.

Ну как же "точно так"? Ить там неопределенность в арифметике в конце концов Вы все таки нашли. А здесь ее нет. Это совсем не точно так же у Вас получилось.

Favn
Как и 0 (отсутствие значения) в арифметике.

Зачем же 0 непременно отсутсвие значения, а не значение? Если под отсутсвием значение понимать, что нет даже нуля, то этого в арифметике нет, а 0 там есть. Значит они разные?

Favn
И любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен.

Вы сначало расширте множество неопределенностью, потом определите опреации, чтобы все это было видно, а потом доказывайте это утверждение. А пока я думаю ясности нет. Есть то как поддерживают МД в этой части СУБД? и соотвественно возможность это учитывать при пректировании.

ПС
В тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741659
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov AndreyНа мой взгляд, выглядит так, что указанное отличие для CHAR - ошибка, исправлять которую ни у кого нет желания :)А на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741721
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoВ тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.Это утверждение было в предыдущих постах. Пожалуйста, повторю точнее:
NULL в SQL введен как обозначение неопределенного в данный момент значения. Это следует из получения NULL как результата любой логической операции с операндом NULL в любой РСУБД.
И аналогично NULL является результатом вообще любой операции с операндом NULL в вообще любой РСУБД (кроме, конечно, проверок на NULL).
Единственное исключение - это именно строковые типы именно в Оракле. Что со стороны Оракла кажется мне нелогичным и ошибочным.
vadiminfoВсе еще допускаю, что ее там нет тока от того, что "Иначе она была бы неопределенностью, которая есть возможность любого значение из этого множества", но и была бы чем угодно. Т.е. какую бы личину она не приняла, ее, скорей всего, там бы не было.Именно это я и утверждал.
vadiminfoВ любом случае та неопределенность, "которая есть возможность любого значение из этого множества" похожа на переменную, на которую таки можно делить, если она не равна 0. Вы знаете, что индоевропейские языки многозначны?..Рассуждения о философском смысле числа 0 и индоевропейских языках предлагаю отставить в сторону. Возможно, я увлекся. Но и не только я. ;)
В любом случае - понятия NULL в смысле "значение не определено" нет в явном виде ни в арифметике, ни в операциях над строками в программировании на большинстве универсальных языков. Это понятие есть в SQL с его процедурными расширениями.
А вот "пустая строка" есть практически везде, и отнюдь не в смысле "значение не определено", а в смысле "строка, не содержащая символов, т.е. пустая". Кроме Оракла, конечно. Т.е. тут ('' в смысле "значение не определено") Оракл выбивается не только из ряда РСУБД, но и из ряда практически всех остальных систем программирования, что выглядит по меньшей мере странно.
vadiminfoFavnИ любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен.Вы сначало расширте множество неопределенностью, потом определите опреации, чтобы все это было видно, а потом доказывайте это утверждение.При чем тут теория множеств?
Мы рассматриваем NULL в контексте РСУБД. Для них не надо расширять множества и определять операции - все давно определено стандартом, а вовсе не мной.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741724
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Favn
В любом случае, SQLJ ни в одной СУБД не выполняется JVM, которая об SQL вообще ничего не знает и знать не должна.

товарищ, ну путаем теплое с мягким:
IBMThe SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source. The translator converts SQLJ clauses to standard Java statements by replacing the embedded SQL statements with calls to the SQLJ run-time library.
http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.sqlj.doc/topics/csqlj.html

SQLJ это и есть жава код, выполняемый jvm, в случае с db2 пофигу которой, хоть сановскую можно прислонить (завидная интеграция с ядром).

FavnГде тут шизофрения?

шиза а том, что в одной процедуре процедурная часть которая транслируется в "standard Java source file" интепретирует нулл по одному, а декларативный embedded SQL совершенно по другому.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741768
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!товарищ, ну путаем теплое с мягким:
IBMThe SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source. The translator converts SQLJ clauses to standard Java statements by replacing the embedded SQL statements with calls to the SQLJ run-time library.Правильная цитата, но неправильное понимание. По порядку:
IBMThe SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source.Файл с SQLJ не является standard Java source file - директивы #sql не могут быть правильно обработаны стандартным компилятором Java. Чтобы получить standard Java source file:
IBM"The translator converts SQLJ clauses to standard Java statements by replacing the embedded SQL statements with calls to the SQLJ run-time library."Т.е. препроцессор - "SQLJ translator", входящий в состав драйвера DB2 - заменяет все директивы #sql на вызовы SQLJ run-time library. При этом вся SQL-часть директив #sql переносятся в БД, образуя там специальный объект - package в терминах DB2. Этот пакадж в последствии может валидироваться и рекомпилироваться для перестройки планов запросов без всякого изменения самого Java-кода. При это он по-умолчанию связан с конкретной версией SQLJ-модуля, т.е. в той самой части с вызовами SQLJ run-time library хранится информация о том, с каким конкретно пакаджем (и когда откомпилированным) связан данный Java исходник.
Сами же вызовы SQLJ run-time library являются обращениями к конкретным запросам внутри пакаджа, и ничем более.
Yo.!SQLJ это и есть жава код, выполняемый jvm, в случае с db2 пофигу которой, хоть сановскую можно прислонить (завидная интеграция с ядром).SQLJ вообще никем не выполняется. Для его выполнения должен быть вызван препроцессор, который сделает из него Java код, заменив #sql на вызовы SQLJ run-time для DB2 (или на вызовы JDBC - для Оракл). Получившийся исходник Java может быть откомпилячен любым Java-компилером, и, естественно, может быть выполнен на любой (для SP - указанной в конфигурации DB2) Java-машине.
Тесная интеграция с ядром осуществляется за счет использования на сервере type 2 Java драйвера, напрямую с ядром общающегося.
В DB2 все это работает почти так же для любого static SQL в любом языке, не только в жабе.

PS. Так что там с валидацией статики SQLJ в Оракле?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741918
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnА на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)Ошибкой является несоответствие документации, а не логике отдельных людей. В данном случае я вижу, что поведение пустой строки для присваивания переменной char документации не очень соответствует, а значит это - ошибка.
Понятно, что работа Oracle с null не согласуется со стандартом SQL. Честно говоря, мне на стандарт плевать. Проблемы возникнут при разработке кроссплатформенных решений, которыми я постараюсь никогда не заниматься совсем по другим причинам. Точно также меня не задевает и работа с null в других СУБД, хотя лишнее nvl писать иногда надоедает.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741919
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Favn
IBMThe SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source.Файл с SQLJ не является standard Java source file - директивы #sql не могут быть правильно обработаны стандартным компилятором Java.

является. там обычный жава код с декларативными embedded SQL вставками для препроцесора. убери вставки и останется pure java. вот оракловое определение: "A SQLJ program is a Java program containing embedded SQL statements that comply with the International Standardization Organization (ISO) standard SQLJ Language Reference syntax."

FavnТесная интеграция с ядром осуществляется за счет использования на сервере type 2 Java драйвера, напрямую с ядром общающегося.
да, впечатляет. куда там оракловому syntax shugar написанному с нуля и являющемся частью ядра

ЗЫ. теперь надеюсь ясно "Какой-такой декларативный SQL в Java процедуре?"
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741954
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfonull и пустая строка существуют тока в компьютерном типа мире, а факты реального описываются знаками отличными от null и пустая строка.
Вот, возможно, Надо же все варианты учитывать, а не тока первые пришедшие в голову.
Вадим, еще раз сорри за занудство, но в реальном мире факты НЕ_ВСЕГДА описываются теми знаками, которые укладывались бы в типа Вашу теорию. Вариантов значения строк, отличных от null и пустой строки, первых пришедших в мне голову, у меня очень много. :) Коли Вы, как разработчик, не смогли наложить на значения этих переменных разумные ограничения, то все они - ФАКТЫ! В компьютерном мире РМД, наверное и в Вашем...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741967
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПНу, как тут написали, null записывается не только в поле типа varchar (при попытке записи ''), но так же и в поле типа int.
А в поле типа char - нет, не записывается null
Бездна логики (с)

Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?
Если '' не эквивалентно null (несмотря на все здешние убеждения), то почему оно вообще позволяет записать себя в int?Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена". Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741974
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О боги! Откуда вы это всё придумали??? Из MMX-инструкций, устройства FPU?
Какое ещё множество какой такой неопределённостью расширить?
NULL - это просто флаг(!), который говорит, что значения нет. Как я уже сказал, фактически это отдельное(!) свойство, а не отдельное значение. Это, если хотите, атавизм синтаксиса современного SQL, потому что синтаксически присваивается по значению как обычное значение, хотя реально является отдельным самостоятельным свойством, например: !Apple.isNull() ? Apple.GetColor() : RaiseException().
По правильному любые операции с NULL должны приводить к исключению. Если ваша программа дошла до умножения или сложения чего-то с тем, чего не существует - это ошибка при реализации бизнес-логики, это как в сях записать что-то в память по неинициализированному указателю, просто ошибка.

Не надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Всё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741987
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopНо черт возьми смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец! Не проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах. На мой взгляд - не проще. А точнее, вообще трудновыполнимо.
dbms_photoshopЧем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски. Нет ничего идиотского, налицо отступление от стандартов, которое, возможно, чревато (а возможно и оправданно)... В любимой СУБД может не быть FROM... тоже обсуждаемо...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742019
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxО боги! Откуда вы это всё придумали??? [..] 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Но есть вопросы - он флаг в дополнение к значению или вместо? Т.е. ''(varchar) и флаг null? или вместо ''(varchar) - null?
А когда в поле "адрес" у бомжа - '', это <значения нет - для примитивов> или <объект не инициализирован - для объектов>?..

web_foxВсё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк.
Да не, тут больше интересуют вопросы интерпретиции null.
Вот если вынести "адреса граждан" в отдельное отношение, то совершенно справедливо можно наложить ограничение not null and != '' в поле "адрес", т.е. либо у человека адрес имеется и будь добр его заведи, либо адреса нет, тогда и записи не будет, и соединение (композиция) даст null в адресе. Это, говоря Вашими словами, прозрачно и понятно. А без этого - флаги "чего-то", что они значат - надо еще разбираться...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742022
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxНе надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно.Эх, где же вы были, когда стандарты пИсали...
Булгаков. Собачье сердце---~Да не согласен я.

---~С кем? С энгельсом или с каутским?

---~С обоими,~--- ответил Шариков.

---~Это замечательно, клянусь богом. ``Всех, кто скажет, что другая...'' А
что бы вы со своей стороны могли предложить?

---~Да что тут предлагать?.. А то пишут, пишут... Конгресс, немцы
какие-то... Голова пухнет. Взять все, да и поделить...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742026
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sgt.Pepper
Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена".
Конечно. А что в этом плохого?
Как прозвучало "как же логично Он устроен", так с тех пор спокойно и мусолим бездну логики :)

Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты.
Нравится Пушкин - ваше право.
Можете даже других агитировать.
Но аргументы тщательнЕе надо подбирать :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742032
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoЗачем же 0 непременно отсутсвие значения, а не значение? Если под отсутсвием значение понимать, что нет даже нуля, то этого в арифметике нет, а 0 там есть. Значит они разные?Безусловно.
Еще вот какое соображение. Пользовательские интерфейсы обычно при редактировании строки (без выбора из списка) легко дают возможность юзеру изменить null на '', но не наоборот, т.е. с известной долей погрешности можно рассматривать null в адресе гражданина как "неинициализированное, неизвестное значение", а '' как "осмысленное пустое (отсутствующее при декомпозиции)". Что скажете - эта информация в каких-либо случаях заслуживает того, чтобы не быть потерянной?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742035
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПНравится Пушкин - ваше право.
Можете даже других агитировать.
Но аргументы тщательнЕе надо подбирать :)
Над этим мне еще много работать :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742109
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoУточните плиз эти аксиомы, что из них стоящего вывели, чтобы оценить пользу, ну и применть. Я пока не в курсах и считаю NULL вынужденным злом, потому что неопределенности мне не нужны в БД, ввиду их возможности озадачить потребителя информации, и даже сбить с толку в некоторых случаях.
Внешний джойн всегда в общем случае, порождает null'ы, в этих неопределенностях есть много определенно логичного и совершенно однозначно интерпретируемого, в нем столько же зла, сколько и в пустом множестве (коим можно обозвать пустую строку), и в 38.8 по цельсию на градуснике, и в кляксе на библии. Можно ли конкатенцию символов "Ё" и "б" считать ЗЛОМ, или классификатором документа, в котором она встречается, и исходной информацией для применения соответствующих алгоритмов?
:)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742176
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PepperВнешний джойн всегда в общем случае, порождает null'ы, в этих неопределенностях
Кхе...
Нуллы, порождаемые внешним джойном, слегка так отличаются от нуллов, содержащихся в таблицах.
В одном случае это отсутствие значения, в другом - значение неопределённое.
Квадратнолобые дядьки, теоретики бэдэ, очень громко писают кипятком, когда кто-то начинает путать "наличие отсутствия" и "отсутствие присутствия".

Однако ж все продолжают путать.
Чего уж тут ожидать от бедных школьников, заблудившихся среди бэдэшных нуллов и неинициализированных объектных ссылок в каком-то языке программирования.

Это так, к слову пришлось :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742252
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxПо правильному любые операции с NULL должны приводить к исключению. Я верно понял вашу мысль о том, что все СУБД работают совершенно неправильно? Или вы можете назвать СУБД, которая при конкатенации с null выдает исключение?
А если все СУБД работают неправильно, то вопрос лишь в том, какая из "неправильностей" удобнее, привычнее и т.п.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742334
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnvadiminfoВ тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.Это утверждение было в предыдущих постах. Пожалуйста, повторю точнее:
NULL в SQL введен как обозначение неопределенного в данный момент значения.

Наверное, стоит Ваше утверждение усилить словом "только": "только для обозначения неопределенного в данный момент значения", поскольку я, например, думаю что не только для этого его приходится использовать. Ну действительно, а что введено в SQL для "обозначения" свойство отсутсвует - не определено не тока в данный, но и во все последующие моменты? Значение даже специальное в этом случае искажение (значения нет).

NULL - в SQL выглядит как "не заполненое" без уточнеия почему: то ли значение есть но не известно, толи свойство отсутсвует (ну действительно, это буквальное звучание NULL). В этом смысле NULL и привносит неопределенность в МД. Это как бы можно только в коментаритях пометить, а так в МД не отличить.
А у Вас тока свойство есть, но значение не известно. У Вас определенность, но не понятно что использовать для "обозначения" свойство отсутсвует. У меня понятнго что, но не определенность.

То что NULL не может быть испотльзован как свойство отсутсвует не следует из
Favn
Это следует из получения NULL как результата любой логической операции с операндом NULL в любой РСУБД.
.
Вообщето "как результат любой логической операции с операндом NULL " получается UNRNOWN, а не NULL. Здесь важно, что отрицание UNRNOWN снова UNRNOWN, что позволяет в принцие подходит и к свойство отсутсвует. Т.е. в условиях отбора, если он появится, то запрос поведет себя предсказуемым образом для трезначной логики.

По этому
Favn
И аналогично NULL является результатом вообще любой операции с операндом NULL в вообще любой РСУБД (кроме, конечно, проверок на NULL).
.
вовсе не аналогично. Это другие операции. Они уже менее могут подходить к обоим вариантам.
Но это значит что синтаксис не подходит к модели. Посто его приходится не применять: NULL в голом виде не испотльзовать.

Т.е. я думаю, что выход в добавлении кроме NULL еще чего-то, чтобы можно было "обозначить" оба варианта.

Favn
Единственное исключение - это именно строковые типы именно в Оракле. Что со стороны Оракла кажется мне нелогичным и ошибочным.

Переход с NULL на пустые строки Вы сделали без уточнения в какой связи: что из чего тут следует Вы на этот раз не указали.
Пустая строка, например в акцессе как логическая операция возвращает либо FALSE либо TRUE, но не UNRNOWN. В Оракле наверное UNRNOWN, но ее наличие в таблах БД проверить удается в отличии от NULL. Лично для меня от этого только польза: семантичность пустой строки в МД мне не ясна,
а контролировать ее приходится. Речь идет об МД, а процедурном программировангии она нужна в связи с вычислениями.

Favn

Рассуждения о философском смысле числа 0 и индоевропейских языках предлагаю отставить в сторону. Возможно, я увлекся. Но и не только я. ;)

Ну там было про недостаточную определенность термина "неопределенность".


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

Ну вот видите? Поэтому и привлекать рассуждения про арифметику в обоснование утверждения про NULL, возможно, преждевременно.


Favn
А вот "пустая строка" есть практически везде, и отнюдь не в смысле "значение не определено", а в смысле "строка, не содержащая символов, т.е. пустая".

Наверняка мы можем знать, что тока в прогах пустые строки есть. Где ими еще занисмаются в отличии от чисел? Ну в терии информации может, ну и то наверное опять в связи с алгоритмами. Т.е. "практически везде" в компах. И то не везде.

Favn

Кроме Оракла, конечно. Т.е. тут ('' в смысле "значение не определено") Оракл выбивается не только из ряда РСУБД, но и из ряда практически всех остальных систем программирования, что выглядит по меньшей мере странно.

Так Оракле в таблах пустых строк не найти, потому ни в каком значении в МД пустым строкам места, вроде, нет. Это в Аксцессе я када-то пробовал именно, чтобы иметь все случаи: NULL значение есть но не известно, а пустая значение отсутсвует. Но отказался (отсутсвовать могут значения и не строковх типов, а логические опреции с истина или ложь тоже не подошли).


Favn
При чем тут теория множеств?

При том, что Вы пытались говорить о том что должна операция с операндами NULL. А множества хорошо показали себя када думают что же должна операция. Так как если на ея смотреть как на отображение множеств, то картина более цельная может получиться.

Favn
Мы рассматриваем NULL в контексте РСУБД. Для них не надо расширять множества и определять операции - все давно определено стандартом, а вовсе не мной.
Вот и я гАвАрУ. Потому все еще скептически отношусь к попыткам строго вывести про то, что должна операция и про арифметику и проч.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742458
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sgt.PeppervadiminfoУточните плиз эти аксиомы, что из них стоящего вывели, чтобы оценить пользу, ну и применть. Я пока не в курсах и считаю NULL вынужденным злом, потому что неопределенности мне не нужны в БД, ввиду их возможности озадачить потребителя информации, и даже сбить с толку в некоторых случаях.
Внешний джойн всегда в общем случае, порождает null'ы, в этих неопределенностях есть много определенно логичного и совершенно однозначно интерпретируемого, в нем столько же зла, сколько и в пустом множестве (коим можно обозвать пустую строку), и в 38.8 по цельсию на градуснике, и в кляксе на библии. Можно ли конкатенцию символов "Ё" и "б" считать ЗЛОМ, или классификатором документа, в котором она встречается, и исходной информацией для применения соответствующих алгоритмов?
:)
Ну про что там за аксиомы не понял.
Что до NULL в джойнах и зла, так в этих внешних джойнах разве нет, как правило, еще отделения зла, либо выяснения на скока много "зла"? Часто для внешние сединения приходится писать, чтобы зло не прокаралось. Да и как же это интерпретируется? Более часто как свойство отсутсвует или чаще как не известно. И аксимы какие тут применишь?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742833
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!является. там обычный жава код с декларативными embedded SQL вставками для препроцесора. убери вставки и останется pure java.Правильно. И соответствующий стандарту препроцессор занимается именно тем, что преобразует стандартные директивы SQLJ в вызовы некоего (зависящего от СУБД) API, после чего текст м.б. откомпилячен стандартным компилером, т.е. "убирает вставки и останется pure java". Именно это я и утверждал.
Yo.!вот оракловое определение: "A SQLJ program is a Java program containing embedded SQL statements that comply with the International Standardization Organization (ISO) standard SQLJ Language Reference syntax."И тут все правильно. В стандарте есть синтаксис SQLJ, но нигде не сказано, что компилер должен его жрать без предобработки. Попробуйте скормить SQLJ напрямую сановскому компилеру, в конце концов.
Yo.!да, впечатляет. куда там оракловому syntax shugar написанному с нуля и являющемся частью ядра Э... Был бы весьма признателен за ссылку на тот чудесный факт, что именно SQLJ является частью именно ядра Оракла. Мы обсуждали это в прошлом году, и мне попадались ссылки на то, что:
1. SQLJ (статика) в Оракле преобразуется в вызовы JDBC (динамика), т.е. является именно syntax shugar.
2. JVM в Оракл является внешней по отн. к SQL процессору (как и PL/SQL VM), но управляется ядром. При этом имеет свою область памяти, настраиваемую отдельными параметрами.
3. Да, ядро запускает в ней сборщик мусора, что, видимо, и является теснейшей интеграцией ;)
4. Да, JVM копирует данные в/из переменных Java в структуры ядра. Но то же самое делает и type 2 драйвер в DB2.
Возможно, тогда я что-то пропустил или появилась нова информация.
Yo.!ЗЫ. теперь надеюсь ясно "Какой-такой декларативный SQL в Java процедуре?"И теперь, и тогда мне совершенно ясно, что любой SQL является декларативным (языком программирования). В отличие от процедурных :)
А в тексте программы SQL может быть статическим (прямо в тексте написанным) или динамическим (выполняемом из строковых переменных).
И мне до сих пор интересно, выполняется ли для SQLJ, т.е. статического SQL, валидация с изменениями схемы БД в Оракле. Из-за трансляции в JDBC у меня есть сомнения на этот счет.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742894
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web_foxО боги! Откуда вы это всё придумали??? Из MMX-инструкций, устройства FPU?
Какое ещё множество какой такой неопределённостью расширить?
По правильному любые операции с NULL должны приводить к исключению. Если ваша программа дошла до умножения или сложения чего-то с тем, чего не существует - это ошибка при реализации бизнес-логики, это как в сях записать что-то в память по неинициализированному указателю, просто ошибка.Мда. Еще один. "Дорогая, их тут тысячи!" (с)
NULL в процедурных языках с C-подобным синтаксисом не имеет никакого отношения к NULL в SQL. В первых - это пустой указатель (ссылка в Java и т.п.), во втором - unknown, неизвестное (неопределенное) значение.
Различить их очень просто - по операции сравнения.
Сравнение переменной с NULL в процедурных языках дает true или false в зависимости от содержимого переменной. Т.е. NULL является вполне определенным (пустым) значением.
Сравнение с NULL в SQL там, где есть тип boolean, даст тоже NULL вне зависимости от значения сравниваемого поля. И в любой СУБД не даст ни true, ни false. То есть значение unknown, не определено, и любая операция с ним (кроме проверки на NULL) естественно приведет к unknown результату.
Из логики с NULL следует, что у этих языков разные первичные определения NULL, т.е. аксиоматика.
web_foxNULL - это просто флаг(!), который говорит, что значения нет. Как я уже сказал, фактически это отдельное(!) свойство, а не отдельное значение. Это, если хотите, атавизм синтаксиса современного SQL, потому что синтаксически присваивается по значению как обычное значение, хотя реально является отдельным самостоятельным свойством, например: !Apple.isNull() ? Apple.GetColor() : RaiseException().При чем тут флаг? Опять путаете смысл NULL в SQL и его интерпретацию в прикладных библиотеках конкретного языка, в синтаксисе которого возможность unknown значений отсутствует.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36743255
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoНаверное, стоит Ваше утверждение усилить словом "только": "только для обозначения неопределенного в данный момент значения", поскольку я, например, думаю что не только для этого его приходится использовать. Ну действительно, а что введено в SQL для "обозначения" свойство отсутсвует - не определено не тока в данный, но и во все последующие моменты? Значение даже специальное в этом случае искажение (значения нет).Если бы я хотел усилить свое утверждение, я бы и сам с эти справился :)
Как правильно написал ЛП, null может означать и отсутствие значения (как результат внешнего объединения), но это выходит за рамки обсуждаемой "фичи" Оракла. В полях же БД он изначально означает именно unknown, т.е. неизвестно, не определено. Это следует из логических операций над ним. Сравнение любого определенного значения с "пусто" должно возвращать определенный ответ true/false, а вовсе не "unknown", как сравнение с null.
Тем не менее, проектировщик БД вправе использовать его как маркер особого значения, например пустого. Что я лично считаю плохим тоном, т.к. это противоречит той же логике.
vadiminfoNULL - в SQL выглядит как "не заполненое" без уточнеия почему: то ли значение есть но не известно, толи свойство отсутсвует (ну действительно, это буквальное звучание NULL). В этом смысле NULL и привносит неопределенность в МД. Это как бы можно только в коментаритях пометить, а так в МД не отличить.Его можно использовать как "свойство отсутствует". Как и любое другое значение, написав default '' например. Просто default null принимается по-умолчанию, и все.
vadiminfoА у Вас тока свойство есть, но значение не известно. У Вас определенность, но не понятно что использовать для "обозначения" свойство отсутсвует. У меня понятнго что, но не определенность.Прошу прощения, но фразу не понял. "Кто на ком стоял?" (с)
vadiminfoВообщето "как результат любой логической операции с операндом NULL " получается UNRNOWN, а не NULL.Вообще-то, в трехзначной логике NULL и означает UNKNOWN. Просто в классическом SQL нет типа boolean. Цитата о типе boolean из DB2:
"Boolean value represents a truth value of TRUE or FALSE. A Boolean expression or predicate can result in a value of unknown, which is represented as the null value."
Т.е. в IBM считают, что булевский unknown есть null. Думаю, что в Оракле - тоже, раз в DB2 его ввели недавно для совместимости с ним. Я склонен согласиться с ними обоими :)
vadiminfoЗдесь важно, что отрицание UNRNOWN снова UNRNOWN, что позволяет в принцие подходит и к свойство отсутсвует. Т.е. в условиях отбора, если он появится, то запрос поведет себя предсказуемым образом для трезначной логики.Как раз к "отсутствует" логика с NULL не подходит, т.к. результат равенства/неравенства с "отсутствует" вполне определен - либо значение там есть, либо его там нет :)
vadiminfoвовсе не аналогично. Это другие операции. Они уже менее могут подходить к обоим вариантам. Но это значит что синтаксис не подходит к модели. Посто его приходится не применять: NULL в голом виде не использовать.
Т.е. я думаю, что выход в добавлении кроме NULL еще чего-то, чтобы можно было "обозначить" оба варианта.Я придерживаюсь другого подхода - применяю NULL именно в значении "unknown", неизвестно. И синтаксис с логикой тогда подходят, и с моделями - никаких несоответствий.
А значение "пусто" можно обозначить любым подходящим из множества значений поля, например '' для строк написав default ''.
vadiminfoПереход с NULL на пустые строки Вы сделали без уточнения в какой связи: что из чего тут следует Вы на этот раз не указали.
Пустая строка, например в акцессе как логическая операция возвращает либо FALSE либо TRUE, но не UNRNOWN. В Оракле наверное UNRNOWN, но ее наличие в таблах БД проверить удается в отличии от NULL. Лично для меня от этого только польза: семантичность пустой строки в МД мне не ясна, а контролировать ее приходится. Речь идет об МД, а процедурном программировангии она нужна в связи с вычислениями.Связь простая - раз в общем случае NULL может означать "unknown", конкатенация с ним по логике тоже должна вернуть "unknown", т.е. NULL. Т.к. результат остается неизвестным. А в Оракл, по факту результата операций, null/'' означает unknown в операциях сравнения и пустую строку - в конкатенации. В чем и противоречие.
Семантичность пустой строки полностью зависит от внешнего отн. БД приложения и может означать именно "пустое, определенно пустое значение", например. Да это в контексте разговора о СУБД и не важно, как и значение '' в процедурном программировании. Просто литерал '' есть в SQL, и означает он именно пустую строку, и ничего больше. В любом SQL, за одним исключением :)
vadiminfoНу вот видите? Поэтому и привлекать рассуждения про арифметику в обоснование утверждения про NULL, возможно, преждевременно.В арифметике нет NULL. Но в SQL есть арифметика. Именно в контексте ее использования в SQL я ее и "привлекал". Ну, разве что с делением увлекся :) Хотя арифметику к этому обсуждению приплетали и до меня, можно считать это ответом.
vadiminfoНаверняка мы можем знать, что тока в прогах пустые строки есть. Где ими еще занисмаются в отличии от чисел? Ну в терии информации может, ну и то наверное опять в связи с алгоритмами. Т.е. "практически везде" в компах. И то не везде.Минуточку, не надо выдергивать из контекста. Я писал только о пустых строках в ЯП вообще и в SQL в частности. "Обобщенная роль пустых строк в мироздании" меня никогда не интересовала.
vadiminfoПри том, что Вы пытались говорить о том что должна операция с операндами NULL. А множества хорошо показали себя када думают что же должна операция. Так как если на ея смотреть как на отображение множеств, то картина более цельная может получиться.Отн. varchar в Оракле у меня цельной картины не получается. А именно - в операциях сравнения null ведет себя именно как "unknown", а вовсе не как определенное значение '', входящее в множество возможных значений поля varchar. В строковых же операциях он же ведет себя именно как вполне определенный '', иначе результат был бы тоже NULL. В чем я и вижу противоречие.
vadiminfoВот и я гАвАрУ. Потому все еще скептически отношусь к попыткам строго вывести про то, что должна операция и про арифметику и проч.Хорошо. Давайте просто про несоответствие Оракла стандарту в данном случае :) Что совой об пенек, что пеньком об сову...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36743607
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnЕсли бы я хотел усилить свое утверждение, я бы и сам с эти справился :)

Но без этого непонятно в чем различие взлядов.

Favn
null может означать и отсутствие значения (как результат внешнего объединения), но это выходит за рамки обсуждаемой "фичи" Оракла.

Не нуно нас дурачить. Это не выходит за рамки обсуждения про null.
И не как результат внешнего соединения. Я приводил примеры как результат проектирвания.
В "полях".

Favn
В полях же БД он изначально означает именно unknown, т.е. неизвестно, не определено. Это следует из логических операций над ним.

Он назван NULL(это же название то же чего-то да значит). А unknown в логических операциях.

Favn
Сравнение любого определенного значения с "пусто" должно возвращать определенный ответ true/false, а вовсе не "unknown", как сравнение с null.

Смотря что стоит за этим "пусто". Что будет если сравнивать значение с не определено (не имеет смысла). "пусто" всего лиш факт что не заполнено, без указания подробностей (не известно значение), не пределено.

Favn
Тем не менее, проектировщик БД вправе использовать его как маркер особого значения, например пустого. Что я лично считаю плохим тоном, т.к. это противоречит той же логике.

За разрешение спасибо. А пример я вам приводил. Проектировщик выбирает меньшее из зол.

Favn
Его можно использовать как "свойство отсутствует". Как и любое другое значение, написав default '' например. Просто default null принимается по-умолчанию, и все.

Вы думаете, что для значение есть, но не известно NULL ,был изначально, а для свойство отсутсвует его можно использовать, чем_то отличается то отого, что его можно использовать в обоих вариаентах?
Т.е. Вы почти согласились с моей позицией, но не не до конца. Отличие в изначальности? Ну так мы же не истроики? Мало для чего что изначально было? Ить имеет значение для чего оно в текущем моменте.
Кста применение default null зависит от чего-то другого и может подойти обоим вариантам.

Favn
Прошу прощения, но фразу не понял. "Кто на ком стоял?" (с)

Ничего страшного. Она была актуально пока я думал, что Вы признаете за null тока одну возможность в МД: значение есть, но не известно. Как только Вы отказались от этого наше расхождение стало символическим( или по историческому аспекту воапроса).


Favn
Просто в классическом SQL нет типа boolean.
Как в запросах происходит выборка по условию (в WHERE)? Ведь запись в результат попадает только если условие True? Или что там еще есть? Это не зависит от СУБД. Если FALSE или UNKNOWN, то не возвращает. Отличить их можно тем, что если поменять условие на его отрицание, то в первом случае станет TRUE и запись попадет в выборку, а UNKNOWN снова - UNKNOWN и запись не попадет в выборку.


Favn
Думаю, что в Оракле - тоже, раз в DB2 его ввели недавно для совместимости с ним. Я склонен согласиться с ними обоими :)

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


FavnКак раз к "отсутствует" логика с NULL не подходит, т.к. результат равенства/неравенства с "отсутствует" вполне определен - либо значение там есть, либо его там нет :)

Отсутсвет значение в плане бессмыслено, вполне можно считать не известным. Так или иначе при моделировании значение не определено можно приспособиться к такой логике. Возможно это луче чем значение. Другое дело, что, возможно, чище было если бы кроме NULL была бы какое нибудь EMPTY. И логика какяч-нить четырехзначная. Впрочем, может в этом есть недостатки. Наверное это вопрос изучался лет 30 а то и более назад.

FavnЯ придерживаюсь другого подхода - применяю NULL именно в значении "unknown", неизвестно. И синтаксис с логикой тогда подходят, и с моделями - никаких несоответствий.
А значение "пусто" можно обозначить любым подходящим из множества значений поля, например '' для строк написав default ''.

Ну тут кажный как может. Строка не подошла. default '' ниче не дает (кроме того что зваполнять не надо, но это не принципиально).

Favn
Связь простая - раз в общем случае NULL может означать "unknown", конкатенация с ним по логике тоже должна вернуть "unknown", т.е. NULL. Т.к. результат остается неизвестным. А в Оракл, по факту результата операций, null/'' означает unknown в операциях сравнения и пустую строку - в конкатенации. В чем и противоречие.

Ну опять Вы начинаете про должна? А в частном случае NULL выглядит как пустота. Тада что?
Есть синтаксис, а есть модели где он применяется. Вот есть парни которые выбирают синтаксис чтобы он подошел большему числу моделей. А мы пытаемся строго вывсти? А где гарантии, что наши предположения верны?

Favn
Семантичность пустой строки полностью зависит от внешнего отн. БД приложения и может означать именно "пустое, определенно пустое значение", например.

Может то может, но слабовато буит. А для не строковых типов? Не лучше ли специальное понятие EMPTY.
Я скептически отношусь к использованию пустой стпроки в этом плане в СУБД где она есть. Полумеры (не все типы). И там еще что-то, по моему, не пошло.

Favn
В арифметике нет NULL. Но в SQL есть арифметика. Именно в контексте ее использования в SQL я ее и "привлекал". Ну, разве что с делением увлекся :) Хотя арифметику к этому обсуждению приплетали и до меня, можно считать это ответом.

Не не пойдет такое привлечение. Это только уведет в сторону. Может там еще про Геделя вспомнить из-за NULL?

Favn
Минуточку, не надо выдергивать из контекста. Я писал только о пустых строках в ЯП вообще и в SQL в частности. "Обобщенная роль пустых строк в мироздании" меня никогда не интересовала.

Так может пойти дальше и на роль пустых строк забить в МД? Оставить их только в ЯП?

Favn
Хорошо. Давайте просто про несоответствие Оракла стандарту в данном случае :) Что совой об пенек, что пеньком об сову

Ну знает это другой вопрос. Стандарты все равно полностью не все соблюдают, да и стандарты не обязательны и могут меняться. Это процесс. Другая тема.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36744019
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favnweb_foxО боги! Откуда вы это всё придумали??? Из MMX-инструкций, устройства FPU?
Какое ещё множество какой такой неопределённостью расширить?
По правильному любые операции с NULL должны приводить к исключению. Если ваша программа дошла до умножения или сложения чего-то с тем, чего не существует - это ошибка при реализации бизнес-логики, это как в сях записать что-то в память по неинициализированному указателю, просто ошибка.Мда. Еще один. "Дорогая, их тут тысячи!" (с)
NULL в процедурных языках с C-подобным синтаксисом не имеет никакого отношения к NULL в SQL. В первых - это пустой указатель (ссылка в Java и т.п.), во втором - unknown, неизвестное (неопределенное) значение.
Различить их очень просто - по операции сравнения.
Сравнение переменной с NULL в процедурных языках дает true или false в зависимости от содержимого переменной. Т.е. NULL является вполне определенным (пустым) значением.
Сравнение с NULL в SQL там, где есть тип boolean, даст тоже NULL вне зависимости от значения сравниваемого поля. И в любой СУБД не даст ни true, ни false. То есть значение unknown, не определено, и любая операция с ним (кроме проверки на NULL) естественно приведет к unknown результату.
Из логики с NULL следует, что у этих языков разные первичные определения NULL, т.е. аксиоматика.
web_foxNULL - это просто флаг(!), который говорит, что значения нет. Как я уже сказал, фактически это отдельное(!) свойство, а не отдельное значение. Это, если хотите, атавизм синтаксиса современного SQL, потому что синтаксически присваивается по значению как обычное значение, хотя реально является отдельным самостоятельным свойством, например: !Apple.isNull() ? Apple.GetColor() : RaiseException().При чем тут флаг? Опять путаете смысл NULL в SQL и его интерпретацию в прикладных библиотеках конкретного языка, в синтаксисе которого возможность unknown значений отсутствует.

Я внимательно прочитал что вы написали и вот что пишется в документации "самой лучшей субд":
Самая лучшая субдA database column or a SQL expression can have a value, or it can have a special status called null. A null means the absence of a value. A numeric value or a special string encoding cannot be used to indicate a null, since all allowable numeric or string values are reserved for actual data
Это просто флажёк такой "нет значения". Всё просто до безобразия. Поэтому не нервничайте.
Это ФИЗИЧЕСКИЙ смысл NULL. Он один. Есть разные костылики, например, GROUP BY считает NULL=NULL и прочие, - их много, если покопать. Костылики появляются везде, где кому-то что-то показалось удобным и он решил прилепить костылёк

Oracle, например, предлагает такие стандартные интерпретации: missing, unknown, inapplicable data. А как вы там лично интерпретируете ОТСУТСТВИЕ ЗНАЧЕНИЯ, - как "неизвестное" значение, "непонтяное", "неприятное", "плохое", "противное" и т.п. - это на ваш вкус
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36744087
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreyweb_foxПо правильному любые операции с NULL должны приводить к исключению. Я верно понял вашу мысль о том, что все СУБД работают совершенно неправильно? Или вы можете назвать СУБД, которая при конкатенации с null выдает исключение?
А если все СУБД работают неправильно, то вопрос лишь в том, какая из "неправильностей" удобнее, привычнее и т.п.

Вы - директор. Новый груз пришёл, но помещения НЕТ. Вам какая больше нравится ситуация:

1. Кладовщик, посмотрел, что склада нет. Ничего страшного, написал в "принято товара": "неизвестно". И пошёл себе дальше работать как ничего не случилось. Вам надо проверять, на написал ли этот XXX в накладных "неизвестно", чтобы вставить ему.

2. Кладовщик, посмотрел, что склада нет. Пришёл к вам и говорит: "Босс, исключительная ситуация, - товар пришёл, а помещения нет".

Мне нравится второй вариант.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36744093
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_fox1. Кладовщик, посмотрел, что склада нет. Ничего страшного, написал в "принято товара": "неизвестно".
Хуже другое: он взял регистр товаров на складе, и в графу "розовых слоников детских" написал 28 + неизвестно = неизвестно. Забыл число "28" и пошёл дальше работать.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36744132
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerweb_fox1. Кладовщик, посмотрел, что склада нет. Ничего страшного, написал в "принято товара": "неизвестно".
Хуже другое: он взял регистр товаров на складе, и в графу "розовых слоников детских" написал 28 + неизвестно = неизвестно. Забыл число "28" и пошёл дальше работать.
В яблочко.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36744142
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FavnИменно это я и утверждал.

пересказывать, что утверждалось, когда есть текст на предыдущей странице мне лень. еще раз, теперь что я имел ввиду фразой "процедурный код сторед процедуры на SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе" надеюсь ясно ?

Favn
1. SQLJ (статика) в Оракле преобразуется в вызовы JDBC (динамика), т.е. является именно syntax shugar.

то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver

Favn2. JVM в Оракл является внешней по отн. к SQL процессору (как и PL/SQL VM), но управляется ядром. При этом имеет свою область памяти, настраиваемую отдельными параметрами.

я бы сказал так: оракловая JVM ровно на столько внешняя на сколько SQL, PL/SQL внешний для ядра субд. по мне так спроектированная под нужды субд, интегрированная в структуру SGA JVM существенно отличается от работающей во внешнем процессе JVM общего назначения.

FavnИ мне до сих пор интересно, выполняется ли для SQLJ, т.е. статического SQL, валидация с изменениями схемы БД в Оракле. Из-за трансляции в JDBC у меня есть сомнения на этот счет.
не выполняется. там создается такой же profile как и в дб2, структура этого profile файлика описана в стандарте. просто перед созданием profile валидируется SQL.

возвращаясь к SQLJ, в оракле есть два варианта:
1. все то же самое, что и у дб2, все согласно стандарту. к статик SQL прислоняется любая JVM, рядом кладутся profile, только JDBC через который дергается база зовется чуть по другому.
2. не совместимая со стандартом загрузка SQLJ как единое целое в субд, где выполняется под интегрированной в ядро JVM. второй вариант естественно гораздо быстрее. думаю тут просто SQLJ транслируется в обычную Java stored procedure. вот они, по моему, имеют такие же зависимости как и pl/sql
все, оффтопик по sqlj завязываю.

возвращаясь к нашим нулам: для меня выглядит дико когда говорят, что когда я обрабатываю нулл языком сторед процедур, то это один нулл, а когда я обрабатываю ту же сущность из той же таблицы, из того же поля но уже на уровне апп-сервера это уже какой-то другой нулл.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36744146
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, само наличие правил работы с NULL является типичным примером old school-стиля программирования, когда все функции возвращали коды, типа 0 - всё хорошо, 1 - нет прав, 2 - неверно задано имя файла и т.д. Типа операция выполнится по-любому, а ты (если будешь любезен) должен получить код возврата и... обработать его. Хотя, можно не обрабатывать! Не обрабатываешь коды возврата - ничего страшного, программа будет работать дальше, а там как повезёт.

Шли годы. Умные люди поняли, что такой подход позволяет писать тот самый "говнокод", чем люди удивительно часто пользуются. Подход с исключениями не позволяет писать говнокод, сразу же обрывает выполнение программы и говорит: "товарищ, ты написал Говнокод",

ибо ложить шифер на непостроенный гараж есть "говнокод".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36747217
softwarerКогда я учил людей Oracle, я всегда говорил им одну фразу: "Запомните одно-единственное слово, dba_views...Хм... Можно было учить получше :-) - DICTIONARY или его синоним DICT

softwarerВообще-то Oracle изначально был написан на ассемблере.Да, самая первая коммерческая версия. Но начиная с незапамятных времен и версии 3 - на C (компилятор C был баксов на 100 дешевле компилятора Pascal)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36747234
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, к слову...Хм... Можно было учить получше :-) - DICTIONARY или его синоним DICT
Наверняка можно было лучше, и не только в этом.

так, к слову...Но начиная с незапамятных времен и версии 3 - на C
Вполне вероятно, что в целях совместимости уже не захотели менять формат. Также вполне возможно, что осознанно решили использовать более прогрессивный.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36747400
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver


Это, хм, к вопросу о поддержке Ораклом стандартов )
JDBC driver type {1-5} - это часть стандарта Java. IBM честно указывает, какому стандарту соответствует предоставляемый драйвер.
Oracle, как всегда, стандарты игнорирует...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36747563
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Yo.!
то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver


Это, хм, к вопросу о поддержке Ораклом стандартов )
JDBC driver type {1-5} - это часть стандарта Java. IBM честно указывает, какому стандарту соответствует предоставляемый драйвер.
Oracle, как всегда, стандарты игнорирует...
А мужики то не знают.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36747623
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander RyndinDPH3Yo.!
то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver


Это, хм, к вопросу о поддержке Ораклом стандартов )
JDBC driver type {1-5} - это часть стандарта Java. IBM честно указывает, какому стандарту соответствует предоставляемый драйвер.
Oracle, как всегда, стандарты игнорирует...
А мужики то не знают.
Типа шутка? Чуть выше о том и говорят, что стандартная вещь названа по своему.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36748012
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmAlexander RyndinDPH3
Oracle, как всегда, стандарты игнорирует...
А мужики то не знают.
Типа шутка? Чуть выше о том и говорят, что стандартная вещь названа по своему.эм... придумывать свои названия и игнорировать стандарты - это 2 разные вещи.
кроме того, по ссылке можно видеть, что у Oracle есть 2 драйвера четвертого типа (JDBC Thin client-side driver и JDBC Thin server-side driver). как их называть? мне кажется, что все логично.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36749381
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, к слову...
softwarerВообще-то Oracle изначально был написан на ассемблере.Да, самая первая коммерческая версия. Но начиная с незапамятных времен и версии 3 - на C (компилятор C был баксов на 100 дешевле компилятора Pascal)

не потому что дешевле, а потому что портировать паскалевский Ораkл на 28 ОС не удалось бы.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36749398
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsikпотому что портировать паскалевский Ораkл на 28 ОС не удалось бы.
Столь же сомнительное утверждение, как и предыдущее.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36750919
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoНо без этого непонятно в чем различие взлядов.Ок. Определимся. Я считаю, что строковый NULL в Оракле ведет себя как "пустая строка" в строковых операциях и как общепринятый NULL в остальных, что бы он там не значил. И это:
1. Внутренне противоречиво.
2. Противоречит поведению базового типа varchar во всех остальных РСУБД.
Т.е. является архитектурной "багой", проистекающей из совпадающего способа хранения NULL и '', традиционно для архитектурных "баг" (не только Оракла :) ) замаскированной под "фичу". Причем "фича" эта deprecated самим Ораклом.

В дополнение к этому я считаю, что изначальным значением NULL в SQL в описании полей было именно "неопределенное значение", и это следует из логичесих операций с участием NULL. Но этот вопрос к данной дискуссии не относится. О "неопределенности" я говорил именно в свете того, что раз NULL может означать неопределенность, толковать его именно как пустую строку неправомерно.
vadiminfoНе нуно нас дурачить. Это не выходит за рамки обсуждения про null.
И не как результат внешнего соединения. Я приводил примеры как результат проектирвания.
В "полях".Integer или char(1), например, при проектировании можно использовать для каких-нибудь флагов. Это не значит, что integer и char вводились именно для флагов.
vadiminfoОн назван NULL(это же название то же чего-то да значит).Да, NULL. А имея в виду именно "пустоту" могли бы назвать VOID, например.
vadiminfoТ.е. Вы почти согласились с моей позицией, но не не до конца. Отличие в изначальности? Ну так мы же не истроики? Мало для чего что изначально было? Ить имеет значение для чего оно в текущем моменте. По моему мнению, принципиальное отличие не в "изначальности", а в результатах логических операций. Если использовать логику кроме is null в запросах с этим полем не предполагается, NULL может значить что Вам угодно. Но не надо делать из частного случая общее правило.
За сим теоретический спор с привлечением лингвистики и философии предлагаю закончить в виду полной бесперспективности :)
И сосредоточится на конкретном толковании NULL varchar в Оракле и остальных РСУБД.
vadiminfoНу знает это другой вопрос. Стандарты все равно полностью не все соблюдают, да и стандарты не обязательны и могут меняться. Это процесс. Другая тема.Когда речь идет о расширениях SQL - безусловно. Но мы говорим о базовой операции || над базовым же типом varchar.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36750937
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web_foxЯ внимательно прочитал что вы написали и вот что пишется в документации "самой лучшей субд"...
Это просто флажёк такой "нет значения". Всё просто до безобразия. Поэтому не нервничайте.Да мне, собственно, нервничать ни к чему. Тем более из-за цитаты из документации продукта, который я пока не использую и багу в котором обсуждаю :)
web_foxВообще, само наличие правил работы с NULL является типичным примером old school-стиля программирования, когда все функции возвращали коды, типа 0 - всё хорошо, 1 - нет прав, 2 - неверно задано имя файла и т.д. Типа операция выполнится по-любому, а ты (если будешь любезен) должен получить код возврата и... обработать его. Хотя, можно не обрабатывать! Не обрабатываешь коды возврата - ничего страшного, программа будет работать дальше, а там как повезёт.Опять за свое. Какие "коды возврата" в декларативном, непроцедурном языке SQL? Какой-такой new scool в SQL, использующий исключения? Куда, по-вашему, должно выводить исключение в запросе? В каком месте запроса обрабатываться? Где там стек вызовов?
web_foxШли годы. Умные люди поняли, что такой подход позволяет писать тот самый "говнокод", чем люди удивительно часто пользуются. Подход с исключениями не позволяет писать говнокод, сразу же обрывает выполнение программы и говорит: "товарищ, ты написал Говнокод",
ибо ложить шифер на непостроенный гараж есть "говнокод".В контексте обсуждения - бред полный.
За долгие годы работы с C++, например, я худо-бедно разобрался с тем, что такое "исключения". Может, "умные люди" подскажут, в каком месте именно SQL я должен их использовать?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36750965
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnЯ считаю, что строковый NULL в Оракле ведет себя как "пустая строка" в строковых операциях и как общепринятый NULL в остальных,
Не совсем так, к сожалению.

Favn1. Внутренне противоречиво.
Это значит, что Вы можете назвать "внутреннее противоречие" - то есть некое противоречие во внутренних, сугубо оракловых концепциях. Что-то я не совсем в этом уверен :) Хотя сам одно место, пожалуй, назову.

Favn2. Противоречит поведению базового типа varchar во всех остальных РСУБД.
Безусловно.

FavnТ.е. является архитектурной "багой",
Из (2) это никак не следует и следовать не может.
Из (1) будет следовать не раньше, чем будет обосновано (1). Да и тогда.... есть в оракле одна чертовски забавная бага, проистекающая из самой сути реализации версионного механизма. Но было бы глупо из-за одной исчезающе редкой проблемы отказываться от всей версионности.

FavnПричем "фича" эта deprecated самим Ораклом.
Чушь.

Favn ... изначальным ... неправомерно.
Такое ощущение, что Вы обсуждаете юридический вопрос. В инженерной работе такая постановка вопроса просто нелепа.

Скажем, у меня был проект, где было удобно принять, что N/0=null. И я определил операцию деления именно таким образом. И это значительно упростило всем работу и уменьшило количество ошибок. И честное слово, забавно было бы понаблюдать, как какой-нибудь "тру математик" кричал бы, что это неправомерно, на ноль делить нельзя и мы обязаны немедленно взвалить на себя тройной геморрой.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36751120
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!пересказывать, что утверждалось, когда есть текст на предыдущей странице мне лень. еще раз, теперь что я имел ввиду фразой "процедурный код сторед процедуры на SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе" надеюсь ясно ?Не надейтесь, не ясно. Даже после того, как Вам стало лень :)
Еще раз - ни одна JVM о правилах SQL не в курсе. Т.к. любой SQL выполняется движком SQL, а Java-код - JVM.
По поводу фразы - процедурный код Java SP в любом случае выполняется какой-то JVM, а собственно SQLJ-вставки в него, т.е. #sql директивы - в любом случае выполняются движком SQL. Или Оракл JVM сама SQL выполняет, без собственно Oracle Database? :)
Поэтому что сторонняя Java машина, что своя - о правилах SQL конкретной СУБД должен знать SQLJ препоцессор, с СУБД поставляемый, а вовсе не сама JVM.
Кстати, с DB2 всегда в комплекте поставляется именно IBM JVM.
Yo.!по мне так спроектированная под нужды субд, интегрированная в структуру SGA JVM существенно отличается от работающей во внешнем процессе JVM общего назначения.Уже обсуждали, так что замнем для ясности :) В любом случае, к выполнению SQLJ все это никакого отношения не имеет.
Yo.!не выполняется. там создается такой же profile как и в дб2, структура этого profile файлика описана в стандарте. просто перед созданием profile валидируется SQL...
1. все то же самое, что и у дб2, все согласно стандарту. к статик SQL прислоняется любая JVM, рядом кладутся profile, только JDBC через который дергается база зовется чуть по другому.
У DB2 - совсем не так. Разница в том, что в DB2 создается package не только в виде стандартного файлика, а как объект внутри БД, содержащий все запросы SQLJ. И объект этот валидируется с последующими изменениями в БД, и может стать инвалидным, запретив выполнение ставшей "неправильной" SP. JDBC при этом вообще не используется, у них с SQLJ просто общий универсальный драйвер, но внутри драйвера механизмы разные.
Yo.!2. не совместимая со стандартом загрузка SQLJ как единое целое в субд, где выполняется под интегрированной в ядро JVM. второй вариант естественно гораздо быстрее. думаю тут просто SQLJ транслируется в обычную Java stored procedure. вот они, по моему, имеют такие же зависимости как и pl/sqlХотелось бы поглядеть на какую-либо инфу по варианту 2. Я в свое время искал на тему SQLJ по доке Оракла, но ничего похожего не видел.
Yo.!возвращаясь к нашим нулам: для меня выглядит дико когда говорят, что когда я обрабатываю нулл языком сторед процедур, то это один нулл, а когда я обрабатываю ту же сущность из той же таблицы, из того же поля но уже на уровне апп-сервера это уже какой-то другой нулл.И что делать, если это действительно разные нуллы в разных языках? В JDBC, чтобы не было путаницы, даже функцию wasNull() ввели. Не isNull(), чтобы не было нездоровых ассоциаций :)
Да, в SQLJ, в отличие от JDBC, можно использовать Java null для индикации SQL NULL. ИМХО, это неправильно и путает - хороший шанс получить в лоб эксепшн в рантайме при случайном использовании простых типов в хост-переменных.
Лучше по-старинке пользоваться indicator переменными . Меньше путаницы будет.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36751319
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FavnХотелось бы поглядеть на какую-либо инфу по варианту 2. Я в свое время искал на тему SQLJ по доке Оракла, но ничего похожего не видел.

начать можно отсюда
http://download.oracle.com/docs/cd/E11882_01/java.112/e10590/inserver.htm

дальше о реализации sqlj мне не интересно. не моя тема.


Yo.!И что делать, если это действительно разные нуллы в разных языках?

с чего бы им быть разными если описывают они одно понятие (то что лежит в бд) ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36751870
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn
В дополнение к этому я считаю, что изначальным значением NULL в SQL в описании полей было именно "неопределенное значение", и это следует из логичесих операций с участием NULL. Но этот вопрос к данной дискуссии не относится. О "неопределенности" я говорил именно в свете того, что раз NULL может означать неопределенность, толковать его именно как пустую строку неправомерно..

Дополнение ЭТОГО выглядит значительно важнее самого ЭТОГО (NULL много важнее в МД, чем пустая строка, скорее всего). Про "следует" у нас там были все время трудности. У Вас там логические операции возвращали NULL, а из этого может следовать все что угодно, в общем случае, и даже, возможно, может ни чего не следовать.

FavnОк. Определимся. Я считаю, что строковый NULL в Оракле ведет себя как "пустая строка" в строковых операциях и как общепринятый NULL в остальных, что бы он там не значил. И это:
1. Внутренне противоречиво.
2. Противоречит поведению базового типа varchar во всех остальных РСУБД.
Т.е. является архитектурной "багой", проистекающей из совпадающего способа хранения NULL и '', традиционно для архитектурных "баг" (не только Оракла :) ) замаскированной под "фичу". Причем "фича" эта deprecated самим Ораклом.

Строковые операции, логические, арифметические это все же, возможно, разные алгебры в общем случае, чтобы так уж сразу и противоречивость была. Так лавры Рассела в выявлении противоречий нам с Вами, скорей всего, не заполучить.
Про другие СУБД: ну зато не надо писать проверку на пустые строки. Поди плохо?
Favn
Да, NULL. А имея в виду именно "пустоту" могли бы назвать VOID, например.

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

Favn
По моему мнению, принципиальное отличие не в "изначальности", а в результатах логических операций. Если использовать логику кроме is null в запросах с этим полем не предполагается, NULL может значить что Вам угодно. Но не надо делать из частного случая общее правило.
За сим теоретический спор с привлечением лингвистики и философии предлагаю закончить в виду полной бесперспективности :)
И сосредоточится на конкретном толковании NULL varchar в Оракле и остальных РСУБД.

Но тада зачем Вы про изначальность рассуждали, раз дело, как теперь, неожиданно вдруг выясняется не в ней?
Favn
Когда речь идет о расширениях SQL - безусловно. Но мы говорим о базовой операции || над базовым же типом varchar.

Вот какда речь идет о стандартах, то здесь изначальное может играть роль. И я про стандарты уклоняюсь в связи такого рода моментами. Я одобряю Ваши усилия по приведение к стандартам, но поскоку у меня много сомнений, остаюсь в стане болельщиков.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759462
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хммм... Оказывается, Оракул позволяет в базу загрузить не только инвалидные метаданные, но
и данные тоже: http://www.sql.ru/forum/actualthread.aspx?tid=776900
А что, вполне логично...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759472
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Хммм... Оказывается, Оракул позволяет в базу загрузить не только инвалидные метаданные, но
и данные тоже: http://www.sql.ru/forum/actualthread.aspx?tid=776900
А что, вполне логично...


Есть предложения какие констрейнты вешать на кривые ручки вальнувшие текст в другой кодировке в виде RAW в CLOB???

Внимаем
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759480
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Есть предложения какие констрейнты вешать на кривые ручки вальнувшие текст в другой
кодировке в виде RAW в CLOB???

Не, если индусы не сделали валидацию UTF8, то это не лечится.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759485
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Gluk (Kazan)
Есть предложения какие констрейнты вешать на кривые ручки вальнувшие текст в другой
кодировке в виде RAW в CLOB???

Не, если индусы не сделали валидацию UTF8, то это не лечится.


Лили RAW, наплевав на любую валидацию
База сказала "Хазяина UTF8", как бы повел себя FB???
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759513
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)База сказала "Хазяина UTF8", как бы повел себя FB???

Сказала бы "пшолнах, malformed string". Нефиг выдавать win1251 за utf8.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759574
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Gluk (Kazan)База сказала "Хазяина UTF8", как бы повел себя FB???

Сказала бы "пшолнах, malformed string". Нефиг выдавать win1251 за utf8.
а как он отличает win1251 от utf8?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759594
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperа как он отличает win1251 от utf8?

Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному
клиентскому character set (то, что в оракловском NLS_LANG идёт после точки).
В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а
подсунута в win1251, то скорее всего валидацию она не пройдёт.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759618
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
SergSuperа как он отличает win1251 от utf8?

Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному
клиентскому character set (то, что в оракловском NLS_LANG идёт после точки).
В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а
подсунута в win1251, то скорее всего валидацию она не пройдёт.


AI detected

Нетушки, когда льем RAW пусть уж лучше разрешает лить всякий бред, чем отшибает руки на основании того, что данные не понравились его AI
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759744
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
SergSuperа как он отличает win1251 от utf8?

Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному
клиентскому character set (то, что в оракловском NLS_LANG идёт после точки).
В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а
подсунута в win1251, то скорее всего валидацию она не пройдёт.
да ну нафиг
а если я чего-то решил на каком-то своём новом языке написать?

т.е. можно спорить нужно это или нет, но как-то на Оракул позволяет в базу загрузить инвалидные данные не тянет
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759839
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
как-то на Оракул позволяет в базу загрузить инвалидные данные не тянет

А какая именно часть этого утверждения "не тянет"? "Оракул"? Так Оракул. "Позволяет"? Так
позволяет ведь! "Загрузить"? Именно загрузить. "Инвалидные"? А как ещё назвать данные в
кодировке, не соответствующей кодировке базы, которые потом (при выборке) не могут быть
правильно отображены?.. "Данные"? Дык вроде бы данные...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759940
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
SergSuper
как-то на Оракул позволяет в базу загрузить инвалидные данные не тянет

А какая именно часть этого утверждения "не тянет"? "Оракул"? Так Оракул. "Позволяет"? Так
позволяет ведь! "Загрузить"? Именно загрузить. "Инвалидные"? А как ещё назвать данные в
кодировке, не соответствующей кодировке базы, которые потом (при выборке) не могут быть
правильно отображены?.. "Данные"? Дык вроде бы данные...
кодировка - это же типа информация как надо отображать данные, а мало ли что клиент не может отобразить?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36759971
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760107
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?да я уже понял, что кто с FB не работает, тот ничего в жизни не понимает
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760125
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperhvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?да я уже понял, что кто с FB не работает, тот ничего в жизни не понимает"информация как надо отображать данные" находится в файле со шрифтом, например.
Кодировка символов не имеет к этому отношения.

При чём тут FB ? Он конечно развивает способности, заставляя думать, но в данном случае и FB не поможет, увы :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760128
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?

To be Nullor not to be Null в строках уже обсудили. Теперь новый виток - что такое символ, первична ли кодировка или значение =)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760147
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglТеперь новый виток - что такое символ, первична ли кодировка или значение =)Я промолчал на
SergSuperда ну нафиг
а если я чего-то решил на каком-то своём новом языке написать?но на второй ляп уже не сдержался :)

Ну а насчёт витков - пинайте недовольного Ораклом DS'а :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760415
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladSergSuperhvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?да я уже понял, что кто с FB не работает, тот ничего в жизни не понимает"информация как надо отображать данные" находится в файле со шрифтом, например.
Кодировка символов не имеет к этому отношения.
и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтом
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760617
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperhvlad"информация как надо отображать данные" находится в файле со шрифтом, например.
Кодировка символов не имеет к этому отношения.
и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтомМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760658
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ?
в файле со шрифтом и так есть информация о том как рисовать символы
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760677
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladSergSuperhvlad"информация как надо отображать данные" находится в файле со шрифтом, например.
Кодировка символов не имеет к этому отношения.
и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтомМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ?то есть содержит информацию, какой файл нужно выбрать и соответственно как отобразить данные, не так ли?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760690
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperhvladSergSuperhvlad"информация как надо отображать данные" находится в файле со шрифтом, например.
Кодировка символов не имеет к этому отношения.
и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтомМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ?то есть содержит информацию, какой файл нужно выбрать и соответственно как отобразить данные, не так ли?Не так.

После того, как было дано достаточное кол-во намёков, я даже не буду спрашивать - а что имеется в виду под словом отображать и при чём тут СУБД.
Мне этот цирк быстро надоедает, уж извините.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760967
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
SergSuperа как он отличает win1251 от utf8?

Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному
клиентскому character set (то, что в оракловском NLS_LANG идёт после точки).
В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а
подсунута в win1251, то скорее всего валидацию она не пройдёт.

У вас весь софт вот на таких измышлизмах построен? Продолжайте в том же духе, в это время ваши конкуренты добавят действительно полезную функциональность, например нормальную репликацию через захват изменений, а не то, что вы этим сейчас называете.
Удачи.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36760977
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ApexDimitry Sibiryakov
SergSuperа как он отличает win1251 от utf8?

Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному
клиентскому character set (то, что в оракловском NLS_LANG идёт после точки).
В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а
подсунута в win1251, то скорее всего валидацию она не пройдёт.

У вас весь софт вот на таких измышлизмах построен? Продолжайте в том же духе, в это время ваши конкуренты добавят действительно полезную функциональность, например нормальную репликацию через захват изменений, а не то, что вы этим сейчас называете.
Удачи.
это о чем? кто такие конкуренты?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36761152
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmэто о чем? кто такие конкуренты?

Да, мне тоже это интересно. Как и то, что это за "репликация через захват изменений, а не
через то что сейчас". Так и возникает в воображении картина маслом по хлебу: сидят где-то
изменения, а тут врываются амбалы в масках и всех их захватывают.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36762034
канкурэнт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmApexDimitry Sibiryakov
SergSuperа как он отличает win1251 от utf8?

Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному
клиентскому character set (то, что в оракловском NLS_LANG идёт после точки).
В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а
подсунута в win1251, то скорее всего валидацию она не пройдёт.

У вас весь софт вот на таких измышлизмах построен? Продолжайте в том же духе, в это время ваши конкуренты добавят действительно полезную функциональность, например нормальную репликацию через захват изменений, а не то, что вы этим сейчас называете.
Удачи.
это о чем? кто такие конкуренты?
может имелись в виду майскули-постгресы?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36764670
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ApexУ вас весь софт вот на таких измышлизмах построен?
Открою Вам страшную тайну, у них софт даже аналог ораклового substr (1, :n) выполнить не в состоянии.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36764716
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerу них софт даже аналог ораклового substr (1, :n) выполнить не в состоянии.

Да, Оракл всяко впереди планеты всей в умении извлечь подстроку из целого числа...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36764765
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДа, Оракл всяко впереди планеты всей в умении извлечь подстроку из целого числа...
Это иногда полезно. Меня куда более огорчила невозможность в FB без пользовательской функции извлечь подстроку из строки.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36764807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Меня куда более огорчила невозможность в FB без пользовательской функции извлечь подстроку
из строки.

Использование встроенной SUBSTRING запрещено религией?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36765559
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИспользование встроенной SUBSTRING запрещено религией?
Именно так. Моя религия запрещает мне использовать неработающие решения.

29.07.10 10:34:49.753,DEBUG,ORB-733(30),SQL-prepare,select
...
substring (GroupCode from 1 for ?) as SameNameCol,
...
29.07.10 10:34:49.753,WARN,ORB-733(30),SQLConnection,BAD SQL:
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -804
Data type unknown
at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:118)
at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:40)
...


Пришлось заменить на udf-овский substr, тот работает.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36765633
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerМоя религия запрещает мне использовать неработающие решения.

А снизойти до прямого указания убогому серверу нужного типа не позволяет гордость:
Код: plaintext
substring (GroupCode from  1  for cast(? as integer)) as SameNameCol
и всё работает.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36765674
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА снизойти до прямого указания убогому серверу нужного типа не позволяет гордость:
Скорее, целесообразность. Чем набивать код такими жуткими конструкциями, попутно пытаясь объяснить, почему тривиальная функция должна так выглядеть, разумнее таки вызывать работающую тривиальную функцию.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36765684
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
softwarerМоя религия запрещает мне использовать неработающие решения.

А снизойти до прямого указания убогому серверу нужного типа не позволяет гордость:
Код: plaintext
substring (GroupCode from  1  for cast(? as integer)) as SameNameCol
и всё работает.


блинннн лаконично то как :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36765966
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)блинннн лаконично то как :)

Ну, если учесть что во "впередиидущем" тип данных для placeholder вообще никак не
определяется...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36766054
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем больше я живу, тем больше убеждаюсь в том, что неявное приведение типов - зло.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36766233
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyчем больше я живу, тем больше убеждаюсь в том, что неявное приведение типов - зло.
Зло, конечно. Правда, не очень понимаю, какое отношение эта истина имеет к конкретному случаю, где работает совсем другое зло - "дурацкие интерпретаторные синтаксические конструкции с идиотскими ограничениями на месте обычных функций".
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36767470
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПравда, не очень понимаю, какое отношение эта истина имеет к конкретному случаю, где работает совсем другое зло - "дурацкие интерпретаторные синтаксические конструкции с идиотскими ограничениями на месте обычных функций".В данном случае вы ткнули пальцем не просто мимо, а вообще не в ту сторону.
Причина этой конкретной ошибки в том, что Firebird выделяет ресурсы (в том числе память под значения параметров) на этапе препарирования запроса
(читай - компиляции). Есс-но, для параметра неизвестного типа это сделать не возможно.
Т.е. теория про "интерпретаторные синтаксические конструкции" абсолютно не верна.

Почему эта ошибка возникает именно в этом месте (аргументы встроенной ф-ции имеют известные типы) - это стоит посмотреть.
Но я даже не буду предлагать вам внести это в трекер. Вы же выше этого
Ибо не удосужились поискать ответ на этот элементарный вопрос, известный практически всем, кто работает с IB\FB
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36767502
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВ данном случае вы ткнули пальцем не просто мимо, а вообще не в ту сторону.
Ошибаетесь.

hvladПричина этой конкретной ошибки
В общем понятна, но совершенно неинтересна.

hvladЕсс-но, для параметра неизвестного типа это сделать не возможно.
Т.е. теория про "интерпретаторные синтаксические конструкции" абсолютно не верна.
(зевая)

запросрезультатselect substr (code, 1, ?)работаетselect в_общем_то_любая_функция (1, 2, 3, ?, 5, 6, ?, 8) работаетselect substring (code from 1 for ?)не работает

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

hvladНо я даже не буду предлагать вам внести это в трекер. Вы же выше этого
Ничуть. Это как раз могу, ибо усилий по воспроизведению мне в данном случае не жалко. Хотя и потребности в этом, если честно, не ощущаю - потому как не чувствую, что получил от продукта что-то хорошее, что побуждало бы сделать ответное добро.

hvladИбо не удосужились поискать ответ на этот элементарный вопрос, известный практически всем, кто работает с IB\FB
Ээ... тем, кто работает с IB/FB, ответ на этот вопрос надо искать ? Мне казалось, что cast очевиден любому не-идиоту. Если Вас так интересует, я проверил работу этой конструкции с cast до того, как писать на форум, но решил из профилактических соображений сделать то, что раз за разом делает Дмитрий и посмотреть, как вы отреагируете, а заодно зафиксировать на будущее багу в тривиальной корневой функциональности, дабы вспоминать её каждый раз, когда Дмитрий сумеет нагуглить очередную оракловую мелочь.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36767863
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

оставляю Вам общение с Сибиряковым, очевидно что я не вписываюсь в столь высокую компанию

PS зевая, не сломайте челюсть
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36768093
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
дабы вспоминать её каждый раз, когда Дмитрий сумеет нагуглить очередную оракловую мелочь.

Чисто ради точности: ораклятые "мелочи" я не гуглю. Мне более чем достаточно собственного
опыта. Ну и чтения соответствующего раздела на этом форуме.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
419 сообщений из 419, показаны все 17 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Все таки Oracle впереди планеты всей!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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