|
|
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Как ни крути, но Oracle лидер в СУБД. Все таки как не старается MS и другие догнать его, но пока тщетно. Сам я перешел на Oracle и понял как все же он логично устроен. Наверное стал религиозным фанатиком. У Oracle есть столько всяких вкусностей, что наверное его нужно выбирать для любого проекта. Кто-нибудь может привести аргументы, что это не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 00:58 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoodsOracle лидер в СУБД. во блин, Америку открыл. успокойся лучше. goldenfoodsесть столько всяких вкусностей, что наверное его нужно выбирать для любого проекта. вот это уже идиотизм. Если, конечно, кроме Оракла ты больше ничего не знаешь, и знать не хочешь. А еще тут есть несколько городских сумасшедших, которые тебе расскажут, что или FoxPro, или TJ7, или ... куда лучше Оракла. Я же напомню выражение Михаила Елашкина: "Оракл тоже говно, но остальные еще хуже". Так что, я бы советовал придерживался мировосприятия именно в таком ключе. Потому что обратное близко к религиозному бреду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 01:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoods у мня арм-нетбук, какую версию oracle посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 03:26 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
выбираю goldenfoods у мня арм-нетбук, какую версию oracle посоветуете?Oracle Berkeley DB 11g + Oracle Berkeley DB SQL API :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 05:52 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Ёш, та вот, сижу и выбираю: oracle mysql, oracle derby(javadb), oracle berkeley db. oralce oracle под арм не нахожу, а так хотелось :(. наверное, плюну на oracle и поставлю firebird или postgresql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 11:09 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoodsпонял как все же он логично устроен. Логично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 11:51 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЛогично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции Код: plaintext Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который она не умеет и не может по бизнес-логике уметь обрабатывать - и удивляешься сообщению об ошибке. Следующим пунктом, видимо, будет удивление по поводу того, что конвертация cp1251 -> latin1 -> cp1251 проходит не для всех символов. Oracle виноват, однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 12:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov goldenfoodsпонял как все же он логично устроен. Логично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции Код: plaintext Это Вам пояснили ниже. Но даже если и это был бы баг, то не стоит из-за принимать решение о нелогичности оракла. Вот отсутствие журнала транзакций в файерберде это уже не логично. Давайте приводит аргументы по существу, а не искать "вшей". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 12:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
выбираю goldenfoods у мня арм-нетбук, какую версию oracle посоветуете? Арм нетбуком будете пользоваться только Вы в силу его ограниченной вычислительной мощности, соответственно проектом это назвать нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 12:37 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoods wrote: > любого проекта. Кто-нибудь может привести аргументы, что это не так? Я могу. PLSQL -- плохой язык для программирования СУБД. В нём очень много нереляционных возможностей. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 12:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoods wrote: > принимать решение о нелогичности оракла. Вот отсутствие журнала > транзакций в файерберде это уже не логично. Давайте приводит аргументы Что ж там нелогичного ? Не нужен он там -- вот и нету его. Но теперь уже кстати сделали. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 13:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который она не умеет и не может по бизнес-логике уметь обрабатывать - и удивляешься сообщению об ошибке. Вот только почему-то: 1) Этот параметр не описан в документации как неработоспособный для to_number; 2) Автоматическое определение формата числа смог сделать любой, кто в детстве писал калькулятор, интерпретатор или хотя бы парсер, но не разработчики Оракула, включая г-на Бегуна; 3) Ошибка звучит как "неправильное число", а не "неправильный формат". Первые два пункта я ещё могу понять, а вот логику последнего - не понимаю. Если параметр бредовый, почему на него нет ругани? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 13:09 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerDimitry SibiryakovЛогично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции Код: plaintext Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который она не умеет и не может по бизнес-логике уметь обрабатывать - и удивляешься сообщению об ошибке. Следующим пунктом, видимо, будет удивление по поводу того, что конвертация cp1251 -> latin1 -> cp1251 проходит не для всех символов. Oracle виноват, однозначно. А нельзя вот та ? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 13:55 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoodsА нельзя вот та ? Можно. Но зачем тогда вообще формат ТМ существует? Где логика? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПервые два пункта я ещё могу понять, а вот логику последнего - не понимаю. Если параметр бредовый, почему на него нет ругани? Вернее, "не та ругань". Неудачная диагностика - это, безусловно, недочёт. Хотя Вы выбрали далеко не самый яркий пример, куда хуже, например, любимая оракловая диагностика "не найдена правая скобка". Если хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках. Однако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Если хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках. Ну, устаревшие решения не обязательно нелогичные. ЕМНИП идентификатор в 30 байт имеет какое-то отношение к правилам идентификаторов или имён файлов в VAX VMS. softwarer Однако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню). Не слышал о таком случае. Где о нём писалось? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:23 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovМожно. Но зачем тогда вообще формат ТМ существует? Где логика? Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе слышал о таком случае. Где о нём писалось? У меня на компьютере о нём писалось. Пару недель назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить. Ну, я обычно считаю логичным, что если число можно преобразовать в строку с минимальным количеством символов, то должен существовать и способ обратного преобразования. И то, что обратного преобразования не существует, я считаю нелогичным. Но, очевидно, логичный Оракул использует какую-то другую логику. Возможно, женскую. Во всяком случае только женской логикой можно объяснить то, что функции to_number и OCINumberFromString хотя и предназначены для одинаковой цели, действуют по-разному и, вероятно, написаны разными людьми. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:40 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerУ меня на компьютере о нём писалось. Пару недель назад. Т.е. беспроблемность заморозки на уровне "мамой клянусь", зоопарк вирусов-антивирусов умолчательный и проверка файловой системы не проводилась со времён покупки. Это не считая вольного пересказа ошибки... Я видел комп, который регулярно сбрасывал ОЗУ вместо файла hiberfil.sys прямо в бут-сектор. Жаль, что Оракула на нём не было установлено, а то можно было бы на него свалить... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках.30 байт или все же 30 символов ? softwarerОднако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню).В трекер, плс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 14:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoodsвыбираю goldenfoods у мня арм-нетбук, какую версию oracle посоветуете? Арм нетбуком будете пользоваться только Вы в силу его ограниченной вычислительной мощности, соответственно проектом это назвать нельзя. Нетбуком, я не буду пользоваться, будут пользоваться пара десятков моих заказчиков (у которых по паре сотен клиентов, которые пользуются ихними услугами и софтом). Мне нужно написать софт, который использует субд, должно все работать на x86-64, ARM (других условий по железу, пока не было). А в силу его ограниченной вычислительной ... - может еще бронепоезд подогнать, чтобы горох списать, а то видишь ли воробьев развелось ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 15:09 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladsoftwarerЕсли хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках.30 байт или все же 30 символов ? Байт В юникоде - 15 символов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 15:13 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
выбираю oralce oracle под арм не нахожу, а так хотелось :(. oracle lite http://www.oracle.com/technology/products/lite/index.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 15:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarer Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить. Ну, я обычно считаю логичным, что если число можно преобразовать в строку с минимальным количеством символов, то должен существовать и способ обратного преобразования. И то, что обратного преобразования не существует, я считаю нелогичным. Но, очевидно, логичный Оракул использует какую-то другую логику. Возможно, женскую. Оооо я встречался с такой логикой :) Как-то во времена DOS пользовался одним редактором (их тогда много разных было). Ну попользовался, сохранился и решил выйти. Ага, как бы не так, перебрал 101 способ выхода, после чего пошел на поклон к владельцам этого чуда (ментам). Ответ поразил до глубины души: Ты чо, дурак? Как заходил так и выходи ... по F4 !!! Не улавливаете аналогий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 16:38 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!, Oracle Database Lite Mobile Server Спасибо, но того что нужно, самой субд, под ARM нет. Плюс заказчики оценили, во что $ им это выльется. Так что, будем что-то другое пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 16:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТ.е. беспроблемность заморозки на уровне "мамой клянусь", Это куда достойнее, нежели грубые передёргивания, рассчитанные на неграмотного лоха, которые Вы позволяете себе начиная с первого поста этой беседы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 16:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Это куда достойнее, нежели грубые передёргивания, рассчитанные на неграмотного лоха, которые Вы позволяете себе начиная с первого поста этой беседы. Вообще-то как раз в этой теме я покамест придерживаюсь голых фактов и к передёргиваниям не прибегал. Просто продавливаю свой старый вопрос: "есть строка, полученная посредством to_char(..., 'TM'). Как её преобразовать обратно в число?" Согласно моей логике это должно было бы быть to_number(..., 'TM'). Однако облом. Поэтому я и пытаюсь выбить из топикстартера (который заявил, что "как все же он /Оракул/ логично устроен") какую логику надо применить, чтобы найти в Оракуле функцию обратного преобразования данной строки. ЗЫ: Я знаю ответ и знаю что ты тоже его знаешь, но мне интересно как будет выкручиваться именно топикстартер... Покамест от него прозвучали два ответа: "а у вас негров линчуют а в Firebird лога нет" и "to_number вообще без параметра fmt". Оба бесполезны. Второй - потому что без параметра fmt нельзя использовать параметр nlsparam. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 18:55 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Народ, не кормите тролля. И вообще, в постгрисе с преобразованиями получше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 22:22 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
2Dimitry Sibiryakov ты можешь без соплей и эмоций объяснить, что ты ожидаешь получить когда пишешь to_number(..., 'TM') ? я реально не понимаю ход твоих мыслей, строку что-ли ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 22:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!2Dimitry Sibiryakov ты можешь без соплей и эмоций объяснить, что ты ожидаешь получить когда пишешь to_number(..., 'TM') ? я реально не понимаю ход твоих мыслей, строку что-ли ? Вероятно он хочет, чтобы была симметрия между функциями to_char и "обратной" (по мнению Dimitry Sibiryakov) ей to_number. Но кто сказал, что она обратна? Симметрия как раз вероятно и заключается в наличии параметра TM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 22:37 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! что ты ожидаешь получить когда пишешь to_number(..., 'TM') ? я реально не понимаю ход твоих мыслей, строку что-ли ? Число, независимо от формата, в котором оно в строке: '123456.09' или '1.2345609e5'. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 22:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Да, и чтобы десятичным разделителем всегда считалась точка, независимо от NLS_ параметров сессии. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 22:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Число, независимо от формата, в котором оно в строке: '123456.09' или '1.2345609e5'. хорошо, а почему ты решил, что такое поведение нужно добиваться параметром ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. и второй вопрос, как ты перевел фразу "The FM and FX modifiers, used in format models in the TO_CHAR function, control blank padding and exact format checking." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2010, 23:23 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! а почему ты решил, что такое поведение нужно добиваться параметром ? Какое слово из "чтобы десятичным разделителем считалась точка, независимо от текущих NLS-настроек сессии" ты не заметил? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 00:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
выбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 15:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FreemanZAVвыбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. ну кто бы сомневался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 16:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FreemanZAVвыбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. Нуууу. Пока никому не удалось объяснить автору TJ7, что его СУБД возможно не самая лучшая в мире. Это показатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 18:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FreemanZAVвыбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. Исчите. А здесь полно народу за бесплатно обосновают? Вон хоть лисовод в этой ветке надыбал аргумент какой никакой. На тысчу баксов конечно не потянет но на пару баксов мож и сгодится. Или они давно нашли где это, и здесь опробируют обоснования? А потом состригут бабло и с нами (типа тестерами их обоснования) не поделятся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 19:37 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорFreemanZAVвыбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. Нуууу. Пока никому не удалось объяснить автору TJ7, что его СУБД возможно не самая лучшая в мире. Это показатель? Самая лучшая пока что это Visual Foxpro 9! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 01:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Eugenkru10Самая лучшая пока что это Visual Foxpro 9! Конечно же, только Вы упорно умалчиваете как быть "лисе" на кроссплатформе. Или "лисоводы" настолько суровы что кроме винды ниначем больше не работают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:19 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Saller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
"так" - имелось ввиду "работают на винде" конечно, а не на FP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы? А как же быть тогда остальным 3%? Получается ФП не самый лучший. Теперь приведите процент сколько серверов используют на платформе вин/линукс и т.д., сомневаюсь что 97% серверов работают под виндовс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SalleriscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы? А как же быть тогда остальным 3%? Получается ФП не самый лучший. Теперь приведите процент сколько серверов используют на платформе вин/линукс и т.д., сомневаюсь что 97% серверов работают под виндовс. FP уже стал серверной СУБД? Вы за ходом мысли следите хоть немного, плз. а насчет 97% процентов серверов не зря сомневаетесь, потому что здесь картина совсем другая. Поищите по форуму, было обсуждение этого вопроса, с конкретными цифрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:52 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmFP уже стал серверной СУБД? Вы за ходом мысли следите хоть немного, плз. Вы разве не встречале таких извратов когда из ФП делали клиентсерверную? Как-то раз видел в одной организации такой изврат, написана специальная прослойка и т.д., выглядит конечно страшно но работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 09:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SallerВы разве не встречале таких извратов когда из ФП делали клиентсерверную? Как-то раз видел в одной организации такой изврат, написана специальная прослойка и т.д., выглядит конечно страшно но работает. Вообще говоря, примитив типа FP - довольно естественный выбор для трёхзвенок, где appserver и работает "прослойкой" и "делает клиент-серверной". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 10:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. Что, кстати, в рамках заданного вопроса совершенно неважно, и если предположить, что тебя действительно интересует ответ именно на тот вопрос, выглядит как "лишь бы придраться". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 11:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerкогда наконец находишь некую RDB$RELATIONS и вполне логично переходишь к RDB$RELATION_FIELDS, оказывается, что в этой замечательной таблице как-то сложно найти информацию о типе данных этого поляВ чём сложность, в трёх джойнах ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 11:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Таблоидsoftwarerкогда наконец находишь некую RDB$RELATIONS и вполне логично переходишь к RDB$RELATION_FIELDS, оказывается, что в этой замечательной таблице как-то сложно найти информацию о типе данных этого поляВ чём сложность, в трёх джойнах ? В том, что её там нет, совершенно не видно, откуда бы её взять и никакими "логическими рассуждениями" этот путь не найти. Это надо просто знать. Причём как раз в том самом месте - data dictionary - которое должно быть максимально дружественно к "читателю". "Запомните это, дети, патамушта панять это - нэвазможна" (с) Таблоид(содрано отсюда ) Вот именно. Тут у нас нелогично прочитать смысл параметра в документации, а Вы говорите - "содрать отсюда". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 12:26 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Особенно ярко это видно в отношении описания моего компьютера :) Это экстраполяция описания компьютеров пользователей, которые обычно приходят с аналогичными проблемами в тематический раздел. Ничего личного, голая статистика. softwarer А почему не from_char(...,'TM') или, например, не to_number('MT',...)? Потому что эти функции не документированы. А использование недокументированных возможностей - чревато боком. Потому и г-н Бегун о них отказывается рассказывать. softwarer получаешь облом в более чем логичной попытке запросить RDB$TABLES Эта логика основывается на недостаточной информированности: Firebird - реляционная СУБД, а не табличная. softwarer Что, кстати, в рамках заданного вопроса совершенно неважно, и если предположить, что тебя действительно интересует ответ именно на тот вопрос, выглядит как "лишь бы придраться". Вон там, повыше, я уже указывал Ё! на это дополнительное требование, которое он тоже проигнорировал. И которое не выглядит как "лишь бы придраться", если учесть, что мне нужно обрабатывать поток данных с Firebird, которая использует только точку как разделитель. И так да, я не могу передавать данные в двоичном формате, поскольку требуется единообразная обработка разных типов (да и по-любому в Оракуле нет птичьих Decimal и Numeric). Потому строка была выбрана как наименьший деноминатор. И я не могу зафиксировать точку как разделитель в Оракуле, поскольку игнорировать желания пользователя, выраженные в виде NLS настроек - плохой тон. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 12:36 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer никакими "логическими рассуждениями" этот путь не найти. Логику обычно применяют, когда документации уже недостаточно. Как раз потому, что достоверность результатов логики ниже. softwarer Тут у нас нелогично прочитать смысл параметра в документации, а Вы говорите - "содрать отсюда". Это "отсюда" было написано как раз для неспособных открыть для себя Language Reference. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 12:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerпочему, когда наконец находишь некую зашифрованную информацию о типе в таблице RDB$FIELDS (вроде бы логичной, но где же, чёрт возьми, RDB$TABLES?) оказывается, что как-то нетривиально понять, к какой же всё-таки таблице относится это поле? потому что у каждой СУБД есть собственный словарь, и этот словарь вовсе не обязан быть стандартным - нет таких требований. При желании можно было бы создать view на системные таблицы, которые имитируют стандартный интерфейс словаря (не помню, как он называется). Припоминаю какой-то топик, в котором этот вопрос обсуждался, и выяснилось, что вовсе не все СУБД имеют совместимый словарь, да и совместимость у тех, где он есть, тоже хромает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 12:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
kdvПри желании можно было бы создать view на системные таблицы, которые имитируют стандартный интерфейс словаря (не помню, как он называется). INFORMATION_SCHEMA views. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 12:58 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinINFORMATION_SCHEMA views. да, точно, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 13:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 ещё и не умеет выдавать строку в каком-то одном формате, а пихает её наперебой в разных? Как-то некрасиво получается, если одному продукту разрешается вываливать любой мусор, и это нормально, а другой объявляется нелогичным только потому, что в нём требуется чуть подумать "как можно этот мусор разгрести". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 13:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
kdvпотому что у каждой СУБД есть собственный словарь, и этот словарь вовсе не обязан быть стандартным Ну, по стандарту обязан, но в целом я согласен и ничуть не требую от него быть стандартным. Но было бы логично , если бы этот "собственный словарь" был удобным . Когда я учил людей Oracle, я всегда говорил им одну фразу: "Запомните одно-единственное слово, dba_views. Сделав запрос к этому представлению, вы легко найдёте способ достать из системного словаря любую информацию, которая там только есть". И они таки легко находили. Поскольку Дмитрий постулирует необходимость следовать некоей высосанной из пальцаобщепринятой логике, я просто продемонстрировал попытку применить этот же подход к более родной ему тематике. kdvи выяснилось, что вовсе не все СУБД имеют совместимый словарь, да и совместимость у тех, где он есть, тоже хромает. Мало того, сама по себе INFORMATION_SCHEMA как она описана в стандарте не то чтобы отличается удобством. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 13:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Это не "голые факты". Итого, ты задокументированно сказал неправду. Или я сказал правду, а тебе теперь стыдно за зоопарк вирусов у себя на компе и ты всё отрицаешь. Твоё слово против моего. softwarer Дык ты таки реши, ты пользуешься "логикой" или "документацией". Т.е. до места "логику обычно применяют, когда документации уже недостаточно. Как раз потому, что достоверность результатов логики ниже" ты не дочитал... softwarerИ они таки где-то находят здесь логику Кто такие "они"? Я покамест не видел чтобы тут (или где-либо ещё) кто-то восхищался тем "как все же он логично устроен" в отношении Firebird. softwarerНо не очень понимаю, в чём проблема указать nls параметры. В том, что указать их без указания fmt - невозможно. А fmt, работающего как с фиксированным так и экспоненциальным представлением числа - нет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 13:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Поскольку Дмитрий постулирует необходимость следовать некоей высосанной из пальцаобщепринятой логике Вообще-то я всего лишь пытаюсь опровергнуть выдвинутый в заголовочном сообщении тезис "в Оракуле всё очень логично". Показать, что какой-либо другой сервер более логичен я не пытаюсь. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 14:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarer Это не "голые факты". Итого, ты задокументированно сказал неправду. Или я сказал правду, Нет, не или. Ни одного шанса. Ты сказал: Dimitry SibiryakovВообще-то как раз в этой теме я покамест придерживаюсь голых фактов Также ты сказал: Dimitry SibiryakovЭто экстраполяция Итого, ты сказал, что придерживаешься голых фактов и одновременно признал, что как минимум часть изложенного - не факт, а экстраполяция. Таким образом, минимум в одном из этих утверждений ты солгал. Все исходные - доступны в топике и проверяемы. То есть твоя ложь - объективно подтверждённый факт. Привыкай с этим жить, удачи. Dimitry SibiryakovВ том, что указать их без указания fmt - невозможно. А fmt, работающего как с фиксированным так и экспоненциальным представлением числа - нет. И что же в этом нелогичного? Ты опровергаешь тезис "всё логично" примером отсутствия такого смешанного формата. Так объясни, пожалуйста, что нелогичного в его отсутствии? Или каждый раз, когда ты придумываешь какую-то ненужную фичу, её отсутствие кажется тебе нелогичным? Dimitry SibiryakovВообще-то я всего лишь пытаюсь опровергнуть выдвинутый в заголовочном сообщении тезис "в Оракуле всё очень логично". Показать, что какой-либо другой сервер более логичен я не пытаюсь. Видишь ли в чём дело, говорить "очень", "не очень" или там "ниже среднего" можно только относительно какого-либо ожидаемого уровня. Скажем, прыжок на 18 метров в длину - очень длинный, потому как больше мирового рекорда, а прыжок на 50 см в длину - не очень длинный, потому как любой здоровый человек легко прыгнет дальше. Я, если ты заметишь, всего лишь пытаюсь показать, что твой оппонент чертовски неудачно выбрал аргументацию, и в рамках его логики можно найти куда более яркие примеры. Тем не менее, раз уж так сложилось, у тебя есть выбор: либо согласиться с тем, что Firebird - более-менее логичный продукт и может использоваться как базис для сравнения, либо объявить, что Firebird с твоей точки зрения - образец нелогичности и по сравнению с ним нетрудно выглядеть очень логичным. Твой ход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 15:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerИ что же в этом нелогичного? Действительно, что нелогичного в однонаправленных преобразованиях?.. В математике нет обратного преобразования для возведения в квадрат, хэши опять же... В Оракуле нет обратного преобразования для формата TM. Раз нет, значит никому не было нужно. Да, топикстартер прав, Оракул логичен. И вообще он впереди планеты всей. Некоторые, правда, считают, что эта планета катится в ад, но и это логично. Все идите на Оракул! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 15:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВ Оракуле нет обратного преобразования для формата TM. .. Некоторые, правда, считают, что эта планета катится в ад, То есть, по делу сказать нечего. ЧТД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 17:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Сам то понял что написал? Подробнее про Линукс+MSSQL... Про использование СУБД я не писал, обсуждалась схема ФП+дбф. Если использовать те СУБД которые ты перечислил то ФП выкинуть как мусор. Иди читай топик внимательно чтобы не писать тут бред. Модератор: не кормите тролей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 17:50 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
MasterZiv goldenfoods wrote: > принимать решение о нелогичности оракла. Вот отсутствие журнала > транзакций в файерберде это уже не логично. Давайте приводит аргументы Что ж там нелогичного ? Не нужен он там -- вот и нету его. Но теперь уже кстати сделали. Ну как быть с незкоммиченными транзакциями в момент аварийного завершения работы сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
MasterZiv goldenfoods wrote: > любого проекта. Кто-нибудь может привести аргументы, что это не так? Я могу. PLSQL -- плохой язык для программирования СУБД. В нём очень много нереляционных возможностей. В том то его и прелесть. Вы можете объединять код SQL И код обычного языка программирования в одном флаконе ( блоке, процедуре не суть важно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoods Ну как быть с незкоммиченными транзакциями в момент аварийного завершения работы сервера? В момент завершения - никак, на то оно и аварийное. При последующем запуске - пометить как откатившиеся и всё. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov goldenfoodsпонял как все же он логично устроен. Логично устроен, говоришь... Какая же логика стоит за неработоспособностью конструкции Код: plaintext Почему Вы решили что эти функции обратны? Если принять условие, что функции не есть обратны, то можно сделать логический вывод (как и все в оракле, не забываем, что я фанатик), что параметр и не должен быть в обеих функциях сразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarer Да, в самом деле странно. Подаёшь в функцию бредовый параметр, который она не умеет и не может по бизнес-логике уметь обрабатывать - и удивляешься сообщению об ошибке. Вот только почему-то: 1) Этот параметр не описан в документации как неработоспособный для to_number; 2) Автоматическое определение формата числа смог сделать любой, кто в детстве писал калькулятор, интерпретатор или хотя бы парсер, но не разработчики Оракула, включая г-на Бегуна; 3) Ошибка звучит как "неправильное число", а не "неправильный формат". Первые два пункта я ещё могу понять, а вот логику последнего - не понимаю. Если параметр бредовый, почему на него нет ругани? Я думаю средство диагностики может иметь ошибки. Касательно логики устройства Оракл, я прежде всего имею ввиду его архитектуру, а не набор функций, хотя они тоже логичны. Как раз отсутствие параметра, из=за которого весь сыр бор и доказывает логичность этого замечательного продукта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:38 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerDimitry SibiryakovПервые два пункта я ещё могу понять, а вот логику последнего - не понимаю. Если параметр бредовый, почему на него нет ругани? Вернее, "не та ругань". Неудачная диагностика - это, безусловно, недочёт. Хотя Вы выбрали далеко не самый яркий пример, куда хуже, например, любимая оракловая диагностика "не найдена правая скобка". Если хотите поискать нелогичные решения в Oracle - я бы в первую очередь сосредоточился на дико устаревшем ограничении идентификатора в 30 байт, особенно актуальном в многобайтовых кодировках. Однако, это кажется мне мелочью по сравнению, например, с недавним случаем, когда после нормального, беспроблемного увода компьютера в hibernate firebird-овская база отказалась открываться с диагностикой со смыслом "db file corrupted" (точной формулировки не вспомню). Вот почему категорически запрещено ставить файерберд для корпоративного использования. Просто вредно. Лучше потратиться и купить оракл стандарт едишн ван стоит 180 долл пер юзер. А если вообще нет денег, то экспресс едишн очень удобен+получаешь бесплатно еще и разработку веб-интерефейса к базе. Такой себе акцесс а ля оракл получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:41 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
kdvgoldenfoodsOracle лидер в СУБД. во блин, Америку открыл. успокойся лучше. goldenfoodsесть столько всяких вкусностей, что наверное его нужно выбирать для любого проекта. вот это уже идиотизм. Если, конечно, кроме Оракла ты больше ничего не знаешь, и знать не хочешь. А еще тут есть несколько городских сумасшедших, которые тебе расскажут, что или FoxPro, или TJ7, или ... куда лучше Оракла. Я же напомню выражение Михаила Елашкина: "Оракл тоже говно, но остальные еще хуже". Так что, я бы советовал придерживался мировосприятия именно в таком ключе. Потому что обратное близко к религиозному бреду. А что вера это плохо? Человек без веры в что либо не имеет цели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarer Формат TM существует для TO_CHAR-а. Любой, у кого хватит мозгов прочитать документацию, поймёт, что в TO_NUMBER его просто некуда применить. Ну, я обычно считаю логичным, что если число можно преобразовать в строку с минимальным количеством символов, то должен существовать и способ обратного преобразования. И то, что обратного преобразования не существует, я считаю нелогичным. Но, очевидно, логичный Оракул использует какую-то другую логику. Возможно, женскую. Во всяком случае только женской логикой можно объяснить то, что функции to_number и OCINumberFromString хотя и предназначены для одинаковой цели, действуют по-разному и, вероятно, написаны разными людьми. Это Ваша личная логика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarer Это куда достойнее, нежели грубые передёргивания, рассчитанные на неграмотного лоха, которые Вы позволяете себе начиная с первого поста этой беседы. Вообще-то как раз в этой теме я покамест придерживаюсь голых фактов и к передёргиваниям не прибегал. Просто продавливаю свой старый вопрос: "есть строка, полученная посредством to_char(..., 'TM'). Как её преобразовать обратно в число?" Согласно моей логике это должно было бы быть to_number(..., 'TM'). Однако облом. Поэтому я и пытаюсь выбить из топикстартера (который заявил, что "как все же он /Оракул/ логично устроен") какую логику надо применить, чтобы найти в Оракуле функцию обратного преобразования данной строки. ЗЫ: Я знаю ответ и знаю что ты тоже его знаешь, но мне интересно как будет выкручиваться именно топикстартер... Покамест от него прозвучали два ответа: "а у вас негров линчуют а в Firebird лога нет" и "to_number вообще без параметра fmt". Оба бесполезны. Второй - потому что без параметра fmt нельзя использовать параметр nlsparam. Где про негров было сказано? Да файерберда лога нет вот и все факт нелогичности. Но вроде как появился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FreemanZAVвыбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. И они не боятся потерять деньги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Eugenkru10Зайцев ФёдорFreemanZAVвыбираю Oracle впереди планеты всей! Где-то я видел конкурс от самого Оракла. Там дают сколько-то тыщ баксов тому, кто обоснует, чем какая-либо СУБД лучше Оракла. Только вот найти нигде не могу. Нуууу. Пока никому не удалось объяснить автору TJ7, что его СУБД возможно не самая лучшая в мире. Это показатель? Самая лучшая пока что это Visual Foxpro 9! Как вот этот продукт хранит данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы? Откуда такая информация? Например я использую FreeBSD, Oracle Linux для серверной части. FreeBSD+gnome для десктопа и я думаю, таких как я очень много ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarerИ что же в этом нелогичного? Действительно, что нелогичного в однонаправленных преобразованиях?.. В математике нет обратного преобразования для возведения в квадрат, хэши опять же... В Оракуле нет обратного преобразования для формата TM. Раз нет, значит никому не было нужно. Да, топикстартер прав, Оракул логичен. И вообще он впереди планеты всей. Некоторые, правда, считают, что эта планета катится в ад, но и это логично. Все идите на Оракул! Еще раз Ваши утверждения насчет обратности уже есть неверны, соответственно дальнейшая цепочка тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:51 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov goldenfoods Ну как быть с незкоммиченными транзакциями в момент аварийного завершения работы сервера? В момент завершения - никак, на то оно и аварийное. При последующем запуске - пометить как откатившиеся и всё. Как об этом узнает сервер? В нормальных СУБД это видно по журналу транзакций. Ну а как файерберд понимает, что транзакции были не полностью выполнены. Никак понять не могу. Могли бы Вы разъяснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 19:54 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoods Ну а как файерберд понимает, что транзакции были не полностью выполнены. Никак понять не могу. Могли бы Вы разъяснить? Очень просто. В момент первоначальной загрузки базы транзакции не могут быть активны по определению. Соответственно все транзакции, помеченные как активные - результат некорректного завершения и должны быть помечены как откатившиеся. Никаких логов не требуется. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 20:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Очень просто....Никаких логов не требуется. Правильно я понимаю, что следствие такой "простоты" - как минимум не возможность Timе In Poinе Restore и всего другого функционала, связанного с наличием лога транзакций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 20:50 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoodsiscrafmSaller, 97% всех пользователей компьютеров так поступают. Они все настолько суровы? Откуда такая информация? Например я использую FreeBSD, Oracle Linux для серверной части. FreeBSD+gnome для десктопа и я думаю, таких как я очень много позравляю. Ты входишь в 3%! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 21:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
prarklinкак минимум не возможность Timе In Poinе Restore и всего другого функционала, связанного с наличием лога транзакций? не знаю, что Вы имеете в виду под "всего функционала". Если отсюда исключить ACID, то возможно, да. Ну и, если в point in time используются маркеры времени, то в ФБ их нет. goldenfoodsВот почему категорически запрещено ставить файерберд для корпоративного использования. Просто вредно. а вы не читайте всякую муйню. Это я Вам говорю как человек, который чинит базы IB/FB после сбоев оборудования (дисков, контроллеров и т.п.). goldenfoodsДа файерберда лога нет вот и все факт нелогичности. Но вроде как появился. не-лог-ичность от слова лог? Возможно. Насчет "вроде" - нет, не появился. Вы если чего про другие СУБД не знаете, Вы спрашивайте, а не наезжайте. Наезды они не красят наезжающего, совершенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 21:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
goldenfoodsВот почему категорически запрещено ставить файерберд для корпоративного использования. Просто вредно. Лучше потратиться и купить оракл стандарт едишн ван стоит 180 долл пер юзер. А если вообще нет денег, то экспресс едишн очень удобен+получаешь бесплатно еще и разработку веб-интерефейса к базе. Такой себе акцесс а ля оракл получается. Пипец (с) фильм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 21:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinПравильно я понимаю, что следствие такой "простоты" - как минимум не возможность Timе In Poinе Restore и всего другого функционала, связанного с наличием лога транзакций?Насчёт PITR (point in time recovery) - не правильно. Добавив маркеры времени к тр-циям и удерживая сборку мусора можно получить снимок всей БД на любой момент. Насчёт "всего другого функционала" - уточните о чём именно речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 22:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Какова хера удаляют мои ответы? Больше я тут отвечать не будут. Пошёл он накуй этот тупорылый SergSuper - долбоёб какой то! Эта сцука животное неблагодарное, он может тока Хер дрочить и посты удалять, больше нихера он не может потому что он бездарь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 22:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladНасчёт PITR (point in time recovery) - не правильно. Добавив маркеры времени к тр-циям и удерживая сборку мусора можно получить снимок всей БД на любой момент. Гм... А не проще ли будет, таки, сделать отдельный "честный" лог?! Что будете делать, если будет поврежден сам файл бд, в котором и "временные метки" и "мусор"? hvladНасчёт "всего другого функционала" - уточните о чём именно речь. Да все, что связано с использованием лога транзакций - репликация, зеркалирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 22:27 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklin Да все, что связано с использованием лога транзакций - репликация, зеркалирование. Отлично делаются и без лога. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 22:44 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОтлично делаются и без лога. Готов выслушать архитектуру альтернативных решений... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 22:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinГотов выслушать архитектуру альтернативных решений... http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_replicator Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 23:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 23:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklin Дык по другому то никак, ну никак без лога не обойтись. В том или ином его виде. Ну это и ежу понятно. Если брать по большому счёту, то лог, ведущийся не для всей базы, а для каждой отдельной записи и называется MGA. Хотя, конечно, есть варианты... Не все в этом списке признаются в ведении лога: http://www.firebirdfaq.org/faq249/ Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 00:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinЧто будете делать, если будет поврежден сам файл бд, в котором и "временные метки" и "мусор"? А что будете делать Вы? Ну, когда поврежден лог, а есть база, не рассматриваем :-) А вот если будет повреждена база, но есть лог? Лог же не вечный, из него базу целиком не восстановить. Понятно, что можно взять какой-то бэкап базы, и накатить сверху лог, если они "стыкуются". Проблема в том, что FB настолько широко используется, что в массе стоит на компах с одним диском (в лучшем случае raid 1), и даже если этот комп обслуживает админ, то админ невероятно тупой, и не способен даже бэкапы регулярно делать. Я понимаю, что это издержки "дешевизны" ФБ, но такова жизнь. Там где ФБ используется с базами в десятки и сотни гигабайт, обычно и администраторы вменяемые, и бэкапы всякие (включая инкрементные), так что повреждение базы обычно проблем не представляет, и процедура восстановления похожа на откат до какого-то недавнего предыдущего состояния. Впрочем, я увлекся. Моя мысль была о том, что там, где в массе стоит ФБ, любое повреждение Оракловской базы или лога вызовет абсолютно тот же эффект, что и повреждение БД ФБ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 00:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
kdv Впрочем, я увлекся. Моя мысль была о том, что там, где в массе стоит ФБ, любое повреждение Оракловской базы или лога вызовет абсолютно тот же эффект, что и повреждение БД ФБ. в оракле принято в таких условиях (1 hdd) уносить rsync'ом арклоги т.е. размер потерь будет совершенно несоизмерим, даже если админ поленится настроить адекватно размер REDO ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 01:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! в оракле принято в таких условиях (1 hdd) уносить rsync'ом арклоги Это если админ вообще не отключит эти самые арклоги... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 01:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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) с успехом заменит накат журналов тр-ций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 01:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
в оракле говорят есть другая очень правильная и логичная фишка - NULL и пустая строка неразличимы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 03:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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Моя мысль была о том, что там, где в массе стоит ФБ, любое повреждение Оракловской базы или лога вызовет абсолютно тот же эффект, что и повреждение БД ФБ. По большому счету согласен, но все-тки здОрово иметь как можно больше возможностей для восстановления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 08:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSв оракле говорят есть другая очень правильная и логичная фишка - NULL и пустая строка неразличимы Да, есть. И с тех пор, как мне пришлось выполнить проект на MSSQL, я стал эту фишку очень ценить. А ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 08:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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), причем с автоматическим переподключеним клиента на зеркало в случае выхода из строя основного сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 08:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerДа, есть. И с тех пор, как мне пришлось выполнить проект на MSSQL, я стал эту фишку очень ценить. я пожалуй тоже тогда начну очень ценить фишку mssql где null не рассматривается как пустая строка softwarer А ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи. это вы типа к тому, что имеем одну нелогичную вещь, но уравновешиваем ее наличием другой логичной? Ну.. хорошо ) Кстати это-же означает что в unique столбец мы можем сложить несколько пустых строк... даже не знаю как тут с логичностью... Предлагаю тогда пойти дальше и приравнять в оракле значения null и 0 для integer столбцов, так сказать для окончательной победы логики над здравым смыслом. Логика торжествует, планета катится в ад (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSsoftwarerДа, есть. И с тех пор, как мне пришлось выполнить проект на MSSQL, я стал эту фишку очень ценить. я пожалуй тоже тогда начну очень ценить фишку mssql где null не рассматривается как пустая строка softwarer А ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи. это вы типа к тому, что имеем одну нелогичную вещь, но уравновешиваем ее наличием другой логичной? Ну.. хорошо ) Кстати это-же означает что в unique столбец мы можем сложить несколько пустых строк... даже не знаю как тут с логичностью... Предлагаю тогда пойти дальше и приравнять в оракле значения null и 0 для integer столбцов, так сказать для окончательной победы логики над здравым смыслом. Логика торжествует, планета катится в ад (с) Да плевать куда катится твоя логика. Тебе же сказали, фишка не логичная, не значит неудобная. И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerА ещё в оракле есть даже третья очень правильная и логичная фишка - ограничение unique может быть наложено на nullable колонку и допускает наличие null более чем в одной записи. вообще-то, это поведение декларируется стандартом. Хотя, видимо, логичность тут неочевидная даже для ANSI-комитета, ведь, насколько я помню, старые версии стандарта трактовали этот нюанс иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 09:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Да плевать куда катится твоя логика. Тебе же сказали, фишка не логичная, не значит неудобная. И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют). ага, видимо такие-же как и ты родили похожую фишку в vb.net, который позволяет скомпилить вот такое: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. NULL трактуется как неизвестно что а не как какое-то известное значение, тада как '' известное значение. Т.е. тут скорее всего речь не о том что не различает, а о том что при добавлении вместо '' добавляется NULL. Поскоку смысл '' до конца не ясен. Но его моно трактовать как, например, "свойство отсутсвует". Однако, тада возможно нужна четырехзначная логика. И типа специальный знак а не ''. Ну, вроде, Кодд был сторонником четырехзначной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:04 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoТ.е. тут скорее всего речь не о том что не различает, а о том что при добавлении вместо '' добавляется NULL. если вместо "пусто" в БД идет null, то наличие пустых строк в базе ведь невозможно получается? vadiminfo Поскоку смысл '' до конца не ясен. ну здрасте vadiminfo Но его моно трактовать как, например, "свойство отсутсвует" я его обычно трактую как "пустая строка" ) Вполне себе значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:13 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSGluk (Kazan)Да плевать куда катится твоя логика. Тебе же сказали, фишка не логичная, не значит неудобная. И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют). ага, видимо такие-же как и ты родили похожую фишку в vb.net, который позволяет скомпилить вот такое: Код: plaintext 1. 2. вот тут ты меня задел :) я очень не люблю Бейсик и хамов (не знаю почему) отправляйся ка ты в игнор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSя пожалуй тоже тогда начну очень ценить фишку mssql где null не рассматривается как пустая строка Не смею мешать. Правда, мне даже стало интересно: может быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? Я вот за всю свою жизнь столкнулся только с одним таким случаем.... причём, сколько людей я ни спрашивал, ни этого, ни другого мне никто так и не рассказал.... из чего я делаю вывод, что они не сталкивались даже с одним. StalkerSэто вы типа к тому, что имеем одну нелогичную вещь, но уравновешиваем ее наличием другой логичной? Это к тому, что имеем две логичных и удобных фишки. StalkerSКстати это-же означает что в unique столбец мы можем сложить несколько пустых строк... Именно. StalkerSдаже не знаю как тут с логичностью... Великолепно тут с логичностью. Пример на пальцах: атрибут "номер паспорта физ.лица". У физ.лица может не быть паспорта, но если есть, его номер уникален. И хотел бы я посмотреть на обоснование логичности ограничения "паспорта может не быть только у одного физ. лица". StalkerSПредлагаю тогда пойти дальше и приравнять в оракле значения null и 0 для integer столбцов, так сказать для окончательной победы логики над здравым смыслом. Вы, похоже, путаете понятия. Здравый смысл - это соответствие '' и null. "Логика, основанная на здравом смысле" - соответственно то же самое. "Логика, основанная на формальном подходе" - требует их различать. Таким образом, "победа логики над здравым смыслом" возможна только в варианте "различать '' и null". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSя его обычно трактую как "пустая строка" ) Вполне себе значение Строка - набор символов. Нет символов - нет строки, т.е. null а 0 - это значение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoПоскоку смысл '' до конца не ясен. Но его моно трактовать как, например, "свойство отсутсвует". Однако, тада возможно нужна четырехзначная логика. И типа специальный знак а не ''. Ну, вроде, Кодд был сторонником четырехзначной.Вот реальный пример. Для платежки формируется назначение платежа. Причем формирование как бы многоуровневое - сначала определяется на самом нижнем уровне, потом если там не определилось на более высоком и т.д. Логично было бы если не определилось возвращать null. Но дело в том что строка назначения платежа может быть пустая и это нормально, т.е. тогда надо возвращать '' и оно должно отличаться от null. Как вышли из положения: решили вместо пустой строки передавать один пробел. Привыкнуть конечно можно, у кого оракл родной так вообще считают что так и должно быть, но я вот каждый раз ностальгирую :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
_модСтрока - набор символов. Нет символов - нет строки, т.е. null Да щаз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSесли вместо "пусто" в БД идет null, то наличие пустых строк в базе ведь невозможно получается? Ну получается, что попасть пустым строкам туда затруднительно в общем случае. StalkerS vadiminfo Поскоку смысл '' до конца не ясен. ну здрасте vadiminfo Но его моно трактовать как, например, "свойство отсутсвует" я его обычно трактую как "пустая строка" ) Вполне себе значение Хорошо. Как, например, понимать пустую строку в поле ФИО? Вот в Аксцесс есть и пустая строка и NULLS. Так или иначе, если я исчу не пустые значения в общем случае я должен проверять и '' и NULLS. Правда там в Аксцеесе вроде есть возможность различать '' и NULL, типа оно буит что-то выводить. Но на практике мало кто это все заполняет, и при написании запроса часто хотелось бы шобы там были тока NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:40 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer vadiminfoПри выборке вроде различает не принимает пустую за NULL. Ээ.... если это действительно писал Вадим, то я глубоко озадачен. Ну я считал, что если не различала, то запросы Код: plaintext 1. и Код: plaintext 1. Но все выглядит менно так что в табле нет '', а есть NULL. И при трехзначной логике, мне кажется, это честным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 10:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)И лично я предпочитаю, чтобы удобство перевешивало логику (там где они конфликтуют).Да плевать на твои личные предпочтения, ты скажи лучше - Gluk (Kazan)Тебе же сказали, фишка не логичная, не значит неудобная . где именно "сказали" ? В каком посте, кто сказал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerНе смею мешать. Правда, мне даже стало интересно: может быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? Я вот за всю свою жизнь столкнулся только с одним таким случаем.... причём, сколько людей я ни спрашивал, ни этого, ни другого мне никто так и не рассказал.... из чего я делаю вывод, что они не сталкивались даже с одним. пароль, или секретный ответ на вопрос. Есть принципиальная разница в пустом пароле и отсутствии пароля. Скажем, если в систему пытаемся ввести пользователя которым обладает null в качестве пароля - то это нарушение бизнес-правил, отменяем транзакцию и показываем сообщение об ошибке. С пустым паролем - сохраняем. Вывод на экран существуюших аттрибутов некоего обьекта. Выводим только те, кто имеет не null. Какой-то аттрибут может иметь пустую строку в качестве значения. Пользователь может увидеть это и отреагировать softwarer Вы, похоже, путаете понятия. Здравый смысл - это соответствие '' и null. тут моя сильно несогласная. Не надо смешивать принципиально разные вещи в одну кучи из-за каких-то абстрактных удобств. Мне например, тождественность null и "пусто" совсем не кажется удобным. Как я уже приводил пример сверху, кому-то показалось удобным присваивать дефолтные значения value типам в бейсике, а мне это кажется жутко неудобным и путающим стройную логику системы. Лично для меня удобно - это когда логично. Неужели в конце концов так трудно написать isnull() ? vadiminfo Хорошо. Как, например, понимать пустую строку в поле ФИО? как пустую строку. Если нехочется иметь пустую строку - добавляем check. Почему мы должны отождествлять ее с null? softwarer А что именно Вы называете "наличие пустых строк в базе"? С практической точки зрения - в базе лежит значение, которое в ряде случаев (когда удобно) ведёт себя как пустая строка, в ряде случаев (когда удобно) - как null. это что за хитрая дуальность такая, значение само определяет, что и когда мне удобно? :) Не понятно на самом деле, Вадим вон пишет что is null и = '' возвращают разные значения. Имхо, выглядит как усложнение на ровном месте (да еще и несоответствует стандарту) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerПолагаю, это родили те, кого достало из-за идиотизмов Java получать на каждом шагу NullPointerException и постоянно писать нечто типа Код: plaintext не знаю как там в яве, но в дотнет исключение о попытке поступа к null обьекту говорит о серьезных промахах в структуре программе. Идиот здесь программист, а не компилятор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerS пароль, или секретный ответ на вопрос. Есть принципиальная разница в пустом пароле и отсутствии пароля. Скажем, если в систему пытаемся ввести пользователя которым обладает null в качестве пароля - то это нарушение бизнес-правил, отменяем транзакцию и показываем сообщение об ошибке. С пустым паролем - сохраняем. в упор не вижу разницы. пароль он или задан или нет. вопрос или есть или нет. а в век веб приложений, где бровсеры принципиально неразличают нулл и пустую строку какое либо другое поведение становиться совершенно бессмысленным ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Правда, мне даже стало интересно: может быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? вот простой пример допустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет если привязана надо писать "выплата 100 руб согласно договору №100", если нет - просто "выплата 100 руб" если бы null не был бы пустой строкой, можно было бы просто написать Код: plaintext ну и сейчас, глядя на написанные тексты, я вижу много мест, которые можно было бы несколько упростить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:51 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 обеспечивается вышеуказанным накатом дельт. Переключение ролей серверов и клиентов - задача не для движка БД и от наличия лога не зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:51 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerS vadiminfo Хорошо. Как, например, понимать пустую строку в поле ФИО? как пустую строку. Если нехочется иметь пустую строку - добавляем check. Почему мы должны отождествлять ее с null? Т.е. у чела ФИО пустая строка? Шо это значит? Я как раз не говорил об отождествлении пустой строки с NULL. Я предлагал Вам отказаться от пустой строки, до выяснения ея смысла. Вот NULL - означает, например, не известно значение. Т.е. у чела есть ФИО, но оно не известно. А что тада означает пустая строка? Другое дело что свойство может отсутствовать. Например, у чела нет крыльев, поэтому длина крыла ротсутствует. Получается, что у Оракла NULL в общем случае использовать и как свойство отсутсвует. А пустую строку моно было бы трактовать как свойство отсутсвует. Но я все еще думаю, что для свойства отсутствует нуно спец знак и четырехзначная логика. Иначе все равно полумеры, путаница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 11:56 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfo Т.е. у чела ФИО пустая строка? Шо это значит? У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvlad Зеркалирование - в IB испокон века есть shadow для зеркалирования файла БД (эдакий raid1). Если речь о зеркалировании на другой сервер ....то тень нормально живёт и на NFS. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerS, по той логике, можно было бы отождествить FALSE и NULL. Аргументировать можно как "TRUE - есть, FALSE - нет, NULL - тоже нет". А потом прикрутить движки таблиц, убрать лишний функционал, добавить немного глюков, горсточку тормозов и мы получим... MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:23 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдорvadiminfo Т.е. у чела ФИО пустая строка? Шо это значит? У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж. Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует. У Оракла NULL и для не известного, а для свойства отсутсвует как получится. Ну, чаще это декомпозиция. Адреса в другой табле и у бомжей запис в ней отсутсвуют. Ну это больше похоже на NULL. Ить если Вы используете пустое для свойство отсутсвует, то ожидается что на попытку его сравнить со значением, оно как-то скажет, что это бессмысленно. А оно не говрит ниче такого, сранивает и возвращает FALSE, как будто свойство есть но оно не равно. Тада, возможно, луче NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoЗайцев Фёдорvadiminfo Т.е. у чела ФИО пустая строка? Шо это значит? У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж. Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует. Свойство присутствует - и это пустая строка. Т.е. оно было заведено операционистом, в отличии от NULL, где еще ничего не известно. PS. А не могли бы Вы по-русски писать? Ей богу читать тяжело, да и неприятно. Если можете, конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдор У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж. поубивал бы таких проектировщиков. в прошлом году отгадывал - вместо адреса есть пробел, пустая строка, # и @ - вот %$@ть что эта хрень означает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:52 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerСпасибо, я в курсе. Фишка в том, что не все сервера поддерживают это поведение. я сильно подозреваю, что большинство. Так что не совсем понятно, зачем это считать "логичной фишкой" именно оракла. softwarerСтарые - это какие? В SQL92 уже было именно так. в SQL89 было иначе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:58 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladКладём дельту на отдельный диск, обеспечиваем постоянный режим работы в режиме бекапа, и получаем почти полный аналог журналирования . Согласитесь, что все таки не полный, ибо, как совершенно верно подметил kdv, восстановиться можно будет на момент завершения последнего инкрементного бэкапа, а не на момент сбоя. hvladПереключение ролей серверов и клиентов - задача не для движка БД и от наличия лога не зависит. За переподключение клиентов, естевенно, отвечает клиентский механизм доступа к данным, ориентируясь на роль сервера, но вот переключение ролей - это именно задача движка, причем двух "связанных" движков и без той или иной реализации лога, само зеркалирование, переключение ролей и т.п. реализовать практически невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSupervadiminfoЗайцев Фёдорvadiminfo Т.е. у чела ФИО пустая строка? Шо это значит? У человека есть адрес. Адрес известен - он пустой, т.к. этот человек - бомж. Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует. Свойство присутствует - и это пустая строка. Т.е. оно было заведено операционистом, в отличии от NULL, где еще ничего не известно. PS. А не могли бы Вы по-русски писать? Ей богу читать тяжело, да и неприятно. Если можете, конечно Я стараюсь по-русски, но не вседа же получается делать то что мы стараемся. ФИО - пустая строка не бывает. Ну нет таких ФИО. А то о чем Вы говорите, это типа инициализация. NULL не инициализировано, а пустая инициализировано, но не заполнено - это все програмисткие какие-то манипуляции. Ну если данные не структурированы, без прогерства никак, то да. Ну Оракла не структурированные данные LOBы. Ну там есть такое. Но что до РМД, то тут данные не нуждаются в таком прогерстве. В этом то все и дело (иначе зачем все это придумывали?). И операционист завел ошибочные данные - пустую строку. А мне теперь делать отчет. Я проверил на NULL, и думал что все хорошо. Распечатали а там половина не заполнено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! поубивал бы таких проектировщиков. в прошлом году отгадывал - вместо адреса есть пробел, пустая строка, # и @ - вот %$@ть что эта хрень означает ? а что она вообще может означать? а что означает "москва пирогова 12-1 50" ? отвечать не обязательно, ибо адреса - отличная тема для битвы на 100500 страниц ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЕсли потери данных..., то ... делается... Поведение любого сервера в этом плане одинаково. Различаются только используемые средства. Согласитесь, что использовать только встроенные возможности движка куда проще, чем реализовывать все то, что я поскипал в цитировании?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinhvladКладём дельту на отдельный диск, обеспечиваем постоянный режим работы в режиме бекапа, и получаем почти полный аналог журналирования . Согласитесь, что все таки не полный, ибо, как совершенно верно подметил kdv, восстановиться можно будет на момент завершения последнего инкрементного бэкапа, а не на момент сбоя.Во-первых, я выше написал "почти полный аналог" Во-вторых, kdv не говорил о постоянный режиме работы в режиме бекапа. pkarklinhvladПереключение ролей серверов и клиентов - задача не для движка БД и от наличия лога не зависит. За переподключение клиентов, естевенно, отвечает клиентский механизм доступа к данным, ориентируясь на роль сервера, но вот переключение ролей - это именно задача движка, причем двух "связанных" движков Движок БД этим не занимается, уверяю вас. Там есть ещё много других движков. Уберите возможность переключения ролей - и ничего не сломается с точки зрения работы экземляра БД. pkarklinи без той или иной реализации лога, само зеркалирование, переключение ролей и т.п. реализовать практически невозможно.Дык "та или иная реализации лога" есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladkdv не говорил о постоянный режиме работы в режиме бекапа. Видимо мы не совсем понимаем друг друга. :) Каков бы не был режим дискретного бэкапирования возможность восстановления (при отсутствии возможности сделать бэкап того, чего после сбоя не оказалось в бд) существует с дискретностью бэкапов. hvladДвижок БД этим не занимается, уверяю вас. Там есть ещё много других движков. Под "движком БД" я понимаю "весь" SQL Server, не разделяя его в данном контексте на Relation Engine, Storage Engine и т.п. hvladДык "та или иная реализации лога" есть :) Я с этим и не спорил. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinhvladkdv не говорил о постоянный режиме работы в режиме бекапа. Видимо мы не совсем понимаем друг друга. :) Каков бы не был режим дискретного бэкапирования возможность восстановления (при отсутствии возможности сделать бэкап того, чего после сбоя не оказалось в бд) существует с дискретностью бэкапов.Конечно. Я только намекал на то, что эту самую дискретность можно сделать совсем небольшой. pkarklinhvladДвижок БД этим не занимается, уверяю вас. Там есть ещё много других движков. Под "движком БД" я понимаю "весь" SQL Server, не разделяя его в данном контексте на Relation Engine, Storage Engine и т.п.А я - разделяю, и это важно в контексте нашего обсуждения. Ибо само переключение мастеров при зеркалировании никак не зависит от способа ведения логов. pkarklinhvladДык "та или иная реализации лога" есть :) Я с этим и не спорил. :)Вот и славно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:38 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoНо что до РМД, то тут данные не нуждаются в таком прогерстве. В этом то все и дело (иначе зачем все это придумывали?). И операционист завел ошибочные данные - пустую строку. А мне теперь делать отчет. Я проверил на NULL, и думал что все хорошо. Распечатали а там половина не заполнено.Согласитесь что когда можно проверить и на NULL и на пустую строку - возможностей то больше? Я могу еще узнать делал ли чего операционист и может он осознанно ввел пустую строку. Лучше разве есть он # и @ вместо этого будет ставить? Вообще странно что надо доказывать что когда больше возможностей это лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:50 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoоперационист завел ошибочные данные - пустую строку. А мне теперь делать отчет. Я проверил на NULL, и думал что все хорошо. Распечатали а там половина не заполнено. where isnull(FLD,'') <> '' where coalesce(FLD,'') <> '' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperВообще странно что надо доказывать что когда больше возможностей это лучше. Как уже тут кто-то писал: "если я этим не пользуюсь то это никому не нужно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!в упор не вижу разницы. пароль он или задан или нет. вопрос или есть или нет. пароль задан и это - пустая строка vadiminfo Т.е. у чела ФИО пустая строка? Шо это значит? Я как раз не говорил об отождествлении пустой строки с NULL. Я предлагал Вам отказаться от пустой строки, до выяснения ея смысла. Вот NULL - означает, например, не известно значение. Т.е. у чела есть ФИО, но оно не известно. А что тада означает пустая строка? Другое дело что свойство может отсутствовать. Например, у чела нет крыльев, поэтому длина крыла ротсутствует. Получается, что у Оракла NULL в общем случае использовать и как свойство отсутсвует. А пустую строку моно было бы трактовать как свойство отсутсвует. Но я все еще думаю, что для свойства отсутствует нуно спец знак и четырехзначная логика. Иначе все равно полумеры, путаница. NULL означает отсутствующее значение аттрибута (и не важно, будет-ли оно внесено позже или принципиально отсутствует). Пустая строка означает что аттрибут существует и значение его задано пустой строкой. И почему это все полумеры и путаница? Имхо логичнее просто некуда. ОКТОГЕН Аргументировать можно как "TRUE - есть, FALSE - нет, NULL - отсутствует или неизвестно ". поправил vadiminfo Ну я писал про длину крыл у человека. Это примерно то же. Свойство отсутсвует. У Оракла NULL и для не известного, а для свойства отсутсвует как получится. Ну, чаще это декомпозиция. Адреса в другой табле и у бомжей запис в ней отсутсвуют. т.е. хотите сказать, что в Оракле для отсутствующих свойств необходимо полную декомпозицию что-ли делать, либо делать "как получиться" ? :) Делать реализацию подтипов путем полного разнесения свойств в разные таблицы далеко не всегда хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklin Согласитесь, что использовать только встроенные возможности движка куда проще, чем реализовывать все то, что я поскипал в цитировании?! Соглашусь, если а) эти возможности существуют и б) стабильно работают. За MS не скажу, а вот Оракул хотя и имеет а, но с б у него проблемы, судя по регулярно появляющимся темам в соответствующем разделе этого форума. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperСогласитесь что когда можно проверить и на NULL и на пустую строку - возможностей то больше? Я могу еще узнать делал ли чего операционист и может он осознанно ввел пустую строку. Лучше разве есть он # и @ вместо этого будет ставить? Вообще странно что надо доказывать что когда больше возможностей это лучше. перл - предоставляет непомерно больше возможностей, но люди предпочитают строготипизованные языки ограничивающие возможности. и это правильно, потому как угадывать, кто чего подразумевал под пустой строкой глупо. вообще странно, что нужно доказывать то, что давно победило и является стандартом в вебе ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov судя по регулярно появляющимся темам в соответствующем разделе этого форума. только нужно учитывать, что там в оракле он будет иметь проблему с зависимостями, в firebird он будет иметь практически неразрешимую жопу ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperСогласитесь что когда можно проверить и на NULL и на пустую строку - возможностей то больше? Ну тада можно еще понавводить всяких возможностей: отрицательная строка, Лябда строка и т.д. И проверять их на здоровье. Но ведь, возможно, что МД придумывали не для того, скорее всего, чтобы обременять разработчика провераками чего-го выходящего за предметную область. Скорее все же для того, чтобы в БД была инфа о предметной области, которую можно извлекть не отвлекаясь на какие-то неожиданные особонности. SergSuper Я могу еще узнать делал ли чего операционист и может он осознанно ввел пустую строку. Если это является информационной потребностью, то ожидается что будут специально заводиться какие-то журналы (таблицы в БД) где операционист будет прямо писать что он там делал и зачем, осознанол или нет. Или там аудиты разные. РМД вроде не предусматривает анализа по таблам, о чем думал операционист. Все должно быть в виде описанных в таблах фактов, и то чего делал операциолист то же, если это представляет информационный интерес. SergSuper Лучше разве есть он # и @ вместо этого будет ставить? Какая разница? Все равно инфы стоящей там извлечь нельзя и в том и другом случае. Если же речь идет о рассуждениях в условиях неопределенности, то для этого есть всякие там датамайнинги. Т.е. возможностей у Оракла хватит. SergSuper Вообще странно что надо доказывать что когда больше возможностей это лучше. Ну не знаю. У мобилы с камерой больше возможностей чем у камеры: последние звонить не могут. Но некоторые покупают только камкеры, а некоторые мобилы без камер. В данном же случае рациональное от такой типа возможности ставится под сомнение, а гемор от контроля того что же в БД записалось NULL или \'\', и что это значит может вызывать озабоченность временами. Особенно напрягает вместо а IS NULL писть а IS NULL or a = \'\'. Это и читается плоховато и вообще. Я тоже за возможности. Потому Оракл выбрал. Но этой возможность предпочел бы не пользоваться до выяснения чего-то рационального в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperВообще странно что надо доказывать что когда больше возможностей это лучше.Странно, что надо доказывать, что снижение удобства использования это плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSпароль, или секретный ответ на вопрос. Есть принципиальная разница в пустом пароле и отсутствии пароля. Замечательно. Тот самый единственный пример. Наконец-то кто-то вспомнил про ситуацию "пустой пароль мы сохраняем и не запрашиваем повторно, а при отсутствии пароля - запрашиваем его у пользователя". Правда, для СУБД это очень редкая задача :) StalkerSВывод на экран существуюших аттрибутов некоего обьекта. Выводим только те, кто имеет не null. Какой-то аттрибут может иметь пустую строку в качестве значения. Пользователь может увидеть это и отреагировать Это уже не "конкретный пример", а некие абстрактные философствования с закольцованной логикой: "это нужно потому что может понадобиться для чего-нибудь". StalkerSМне например, тождественность null и "пусто" совсем не кажется удобным. Если Вы работали и в той, и в другой реализации - с интересом выслушаю Ваше мнение о плюсах и минусах. Если же нет - подчеркну, что "кажется" не всегда выдерживает столкновение с реальностью. StalkerSКак я уже приводил пример сверху, кому-то показалось удобным присваивать дефолтные значения value типам в бейсике, Кстати, я не увидел в приведённом примере дефолтных значений. Может быть, конечно, и такая реализация, но увидел я всего лишь умное поведение для случая obj = null, сродни классическому дельфовому Код: plaintext 1. 2. 3. 4. StalkerSНеужели в конце концов так трудно написать isnull() ? О, это один из тех вопросов, который отличает "теоретиков" от "практиков". Первые уверены, что нетрудно. Вторые, написав этот isnull() несколько десятков, несколько сотен или несколько тысяч раз, начинают любить теории других теоретиков, где не нужно заниматься подобной тупизной. StalkerSНе понятно на самом деле, Вадим вон пишет что is null и = '' возвращают разные значения. Они действительно возвращают разные значения. Тем не менее я.. изрядно не согласен с формулировками Вадима и не готов за них отвечать. StalkerSИмхо, выглядит как усложнение на ровном месте "Не то, к чему я привык" - вовсе не всегда "усложнение", часто наоборот. StalkerSдопустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет ... если бы null не был бы пустой строкой, можно было бы просто написать ... А в чём разница, если null - пустая строка? Заменить nvl на nvl2 - и всего делов-то. С другой стороны, когда null - не пустая строка, простейшее выражение вида name || patronymic || surname превращаются в нечто нечитаемое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreySergSuperВообще странно что надо доказывать что когда больше возможностей это лучше.Странно, что надо доказывать, что снижение удобства использования это плохо.да, я неудачно выразился я имел в виду больше информации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSNULL означает отсутствующее значение аттрибута (и не важно, будет-ли оно внесено позже или принципиально отсутствует). Пустая строка означает что аттрибут существует и значение его задано пустой строкой. И почему это все полумеры и путаница? Имхо логичнее просто некуда. Все дел в том что может быть важно: не известно или значение отсутсвует. Если не важно и NULL и для того и для другого подходит в данной МД, то пустая строка зачем нужна вообще не ясно. Значение заданное пустой строкой не имеет смысла в большинстве случаев в реальном мире, который собсно и отражается в БД. Про полумеры - это если NULL использовать как не известно, а типа пустую строку как свойство не определено. Т.е. это я типа искал какое-то применение пустым строкам. StalkerS т.е. хотите сказать, что в Оракле для отсутствующих свойств необходимо полную декомпозицию что-ли делать, либо делать "как получиться" ? :) Делать реализацию подтипов путем полного разнесения свойств в разные таблицы далеко не всегда хорошо. Я имел в виду что не только в Оракле декомпозиция чаcто применяется для отсутсвующих свойст. Ну действительно, табла со свойствами, которых заведомо нет у сущностей, выглядит как некоея искажение отображения реальности в БД. И констатировал, что это ближе к NULL чем '', если декомпозицию не делать. Если нет четырехзначной логики, то и использование пустых строк для таких свойт, чтобы отличать их от не известно (которые толкуются в этом случае NULL) - полумера, которая не на много улучшает картину, но все так же чревато путанницей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! только нужно учитывать, что там в оракле он будет иметь проблему с зависимостями, в firebird он будет иметь практически неразрешимую жопу ... Поскольку мне в техподдержку таковых жалоб не поступало, могу авторитетно заявить, что "неразрешимая жопа" существует исключительно в твоём воображении. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoВ данном же случае рациональное от такой типа возможности ставится под сомнение, а гемор от контроля того что же в БД записалось NULL или '', и что это значит может вызывать озабоченность временами. Особенно напрягает вместо а IS NULL писть а IS NULL or a = ''. Это и читается плоховато и вообще. Можно, как уже говорилось, isnull(str_attr, '') = '', символов не намного больше, чем str_attr is null. А может пойти еще дальше, и строку, состоящую ТОЛЬКО из n пробелов также заненять на null, ведь временами и это вызывает озабоченность не меньшую, чем '' - пустая строка? vadiminfoЯ тоже за возможности. Потому Оракл выбрал. Но этой возможность предпочел бы не пользоваться до выяснения чего-то рационального в ней. Давний пример в свете дилеммы "правильно" - "удобно" - использование from dual. Вы бы предпочли этим пользоваться или нет, если бы oracle позволял просто "select 1"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Поскольку мне в техподдержку таковых жалоб не поступало, могу авторитетно заявить, что "неразрешимая жопа" существует исключительно в твоём воображении. учитывая твою квалификацию (способность читать мануал по одной функции и возмущаться, что описание не работает на другой функции) у меня есть другая теория по чему к тебе не поступают жалобы. хочешь что-то доказать, давай ссылку на проблему в оракле, а мы прикинем через какой ад пришлось пройти в firebird в той же ситуации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Забавно, что все высказывающие здесь озабоченность "нелогичностью" и неудобствами Oracle имеют (судя по профилям) Oracle (скажем дипломатично) не самым основным рабочим инструментом. Может ну его ... пусть ораклоиды или ораклисты (как вам угодно) сами плачут горючими слезами, работая в неудобном Oracle? Оставим кесарю кесарево, что вам до них??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!....ссылку на проблему в оракле, а мы прикинем через какой ад пришлось пройти в firebird в той же ситуации слово "ад" немного не по адресу, имхо, употреблено. FB по определению не может быть сложнее для разработчика или администратора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoВ данном же случае рациональное от такой типа возможности ставится под сомнение, а гемор от контроля того что же в БД записалось NULL или '', и что это значит может вызывать озабоченность временами. Особенно напрягает вместо а IS NULL писть а IS NULL or a = ''. Это и читается плоховато и вообще.Нда, это как разговор со слепым о картинах :) А гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0. И вообще зачем тогда NULL нужен? Пусть пустая строка будет и всё, NULL не использовать и тогда не надо писать а IS NULL or a = '', достаточно только a = ''. Но можно NULL использовать, тогда будут дополнительные возможности, которых в оракле то и нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafm слово "ад" немного не по адресу, имхо, употреблено. FB по определению не может быть сложнее для разработчика или администратора. а это определение с firebird когда нибудь работало ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:22 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperДавний пример в свете дилеммы "правильно" - "удобно" - использование from dual. Вы бы предпочли этим пользоваться или нет, если бы oracle позволял просто "select 1"? Совершенно без разници как писать Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperПусть пустая строка будет и всё, NULL не использовать и тогда не надо писать а IS NULL or a = '', достаточно только a = ''. Почему-то все прицепились к строковым значениям а про числовые забыли. Ведь 0 не тоже самое что null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!iscrafm слово "ад" немного не по адресу, имхо, употреблено. FB по определению не может быть сложнее для разработчика или администратора. а это определение с firebird когда нибудь работало ? я не жалуюсь. есть конечно заморочки, но они значительно менее мешают чем у других. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. Дело в единообразии (стль). Это проще запомнить, луче читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:34 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
АвторСовершенно без разници как писать Код: plaintext 1. 2. Да? А у меня при 2. select 1: Код: plaintext 1. 2. Если не ошибаюсь, это в Oracle 9... Может, в последующих версиях уже по-другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:40 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperАвторСовершенно без разници как писать Код: plaintext 1. 2. Да? А у меня при 2. select 1: Код: plaintext 1. 2. Если не ошибаюсь, это в Oracle 9... Может, в последующих версиях уже по-другому? Вы еще попробуйте 3-й вариант в Оракле запустить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperА гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0. Это что-то не доводилось так часто как а IS NULL or a = ''. В аксцессе мне приходится это делать. 0 все таки значение как и отрицательные числа большего смысла чем пустая строка. SergSuper И вообще зачем тогда NULL нужен? Наверное за тем что это общее для всех типов. А то что свойство не задано может относиться к любым типам. Но '' выглядит как значение тока для строковых И 0 как значение для числовых. Мы с ними можем сравнивать и получать ЛОЖЬ или ИСТИНУ. А с NULL - НЕ ИЗВЕСТНО. Буржуа зря не придумает. Все там схвачено. Мы вряд ли что придумем тут. Четырехзначную и больше тоже давно придумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:44 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoВопрос зачем нужна '', кроме как сбить с толку все еще нуждается в разрешении, мне кажется.[..] Пустая строка это не просто строка символы которых мы не видим, это отсутсвие любых символов. Пробелы могут быть какой-то инфой в какой нибудь предметной области. . Понимаете, тут Вы допускаете, что пробелы гипотетически могут быть какой-то инфой в какой-то предметной области, но примеров таких не приводите, считая, очевидно, Ваше утверждение и так достаточно убедительным аргументом. (Ну, говоря Вашими словами, что может означать 5 пробелов в поле ФИО?). А с пустой строкой говорите, что она кроме как сбить с толку нафиг не нужна, несмотря на то, что кто-то пытается приводить Вам конкретные примеры. vadiminfoНу пердпочел бы, потому что должен быть from. Дело в единообразии (стль). Это проще запомнить, луче читать. Пердпочел - это типа "скрепя сердце"? :) Не могу сказать, что я принципиально с Вами не согласен, но это настолько субъективно выглядит, что утверждение "from не обязательно должен быть, from dual тяжелее запомнить и труднее читать" выглядит не менее убедительно в зависимости от опыта и предпочтений пишущего и читающего. А вот аргумент, что FROM - это стандарт, который следует соблюдать, удобно нам это или нет, меня убеждает сильнее. По мне так и с пустой строкой аналогично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SallerSgt.PepperАвторСовершенно без разници как писать Код: plaintext 1. 2. Да? А у меня при 2. select 1: Код: plaintext 1. 2. Если не ошибаюсь, это в Oracle 9... Может, в последующих версиях уже по-другому? Вы еще попробуйте 3-й вариант в Оракле запустить. Меня интересовали первый и второй. Я Вас так понял, что в oracle они допустимы. Или Вы имели в виду что-то файербердное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperМеня интересовали первый и второй. Я Вас так понял, что в oracle они допустимы. Или Вы имели в виду что-то файербердное? 1.Oracle, 2.MSSQL, 3.FB У MSSQL конструкция некоторых вводит в замешательство :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:21 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! хочешь что-то доказать, давай ссылку на проблему в оракле, а мы прикинем через какой ад пришлось пройти в firebird в той же ситуации Ну давай, попробуем. Вот проблема: /topic/750411 Какой ад ждёт желающего realtime репликацию из нескольких баз в одну в случае Firebird? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SallerУ MSSQL конструкция некоторых вводит в замешательство :) Есть возможность добавить в базу табличку dual, состоящую из одной строки и соответствовать в этом вопросе oracle, не вводя никого в замешательство. Но в MS решили, что можно так и не делать, т.к. размышляли, похоже, примерно так: Softwarerможет быть, именно Вы наконец-то первым на этом свете сумеете рассказать какой-либо конкретный пример из практики, когда эта фишка удобна, приятна, облегчает жизнь и не вызывает острого желания выкинуть её нафиг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ну давай, попробуем. Вот проблема: /topic/750411 Какой ад ждёт желающего realtime репликацию из нескольких баз в одну в случае Firebird? по зависимостям значит слив можно фиксировать или поднатужишься ? ЗЫ. эмулировать функционал Oracle Streams Replication в субд с одним из самых слабых диалектов в индустрии и без лога кроме адом не назовешь имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! по зависимостям значит слив можно фиксировать или поднатужишься ? Слив Оракула - да, можно фиксировать. Ни ты ни Глюк не собрались с духом показать результаты работы тестового скрипта. ЧиТД. Yo.! ЗЫ. эмулировать функционал Oracle Streams Replication в субд с одним из самых слабых диалектов в индустрии и без лога кроме адом не назовешь имхо. Да, эмулировать несостоятельности стримов могло бы быть адом. К счастью, в отличие от PG никто не спешит эмулировать большого брата, так что realtime multimaster репликация для Firebird просто работает. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 Уже не очень хороша в запросе вида Код: plaintext И совсем плоха в запросе вроде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Sgt.PepperА вот аргумент, что FROM - это стандарт, который следует соблюдать, удобно нам это или нет, меня убеждает сильнее. Хм. Для сержанта такая точка зрения, в общем, ожидаема ;-) Устав и два наряда вне очереди. Про стандарты и "следует соблюдать", если мне не изменяет память, было написано у Макконнела, примерно так: "Однажды Ахмед рассказал своей жене семейный рецепт приготовления очень вкусного мяса: нужно взять кусок говядины, обрезать края, промариновать, засыпать специями и жарить до готовности на медленном огне. Жена спросила: А зачем обрезать края? "Не знаю,- ответил Ахмед,- моя мама всегда так делала, надо спросить у неё". Пошёл и спросил. "Не знаю,- ответила мама,- я делаю так потому, что так всегда делала бабушка, надо спросить у неё". Ахмед пошёл к бабушке и услышал: "Не знаю, зачем вы обрезаете края, а я обрезала их потому, что большой кусок мяса не влезал на мою единственную сковородку"" . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Слив Оракула - да, можно фиксировать. Ни ты ни Глюк не собрались с духом показать результаты работы тестового скрипта. ЧиТД. ламаить :) Dimitry Sibiryakov Да, эмулировать несостоятельности стримов могло бы быть адом. К счастью, в отличие от PG никто не спешит эмулировать большого брата, так что realtime multimaster репликация для Firebird просто работает. А кто сказал, что в Oracle репликацию можно делать только Stream-ом? А вот Stream в FB придется искать очень пристально и долго ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:58 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 превращаются в нечто нечитаемое. перепутали автора цитаты, на которую отвечали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) А кто сказал, что в Oracle репликацию можно делать только Stream-ом? Ну так пойди в тему по ссылке и осчастливь автора знанием - чем же в Oracle можно сделать нужное ему, если Stream-ы облажались. Gluk (Kazan) А вот Stream в FB придется искать очень пристально и долго Как и логи. Зачем там бесполезный прибамбас, который даже в Оракуле работает в зависимости от фазы Луны?.. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:09 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Слив Оракула - да, можно фиксировать. Ни ты ни Глюк не собрались с духом показать результаты работы тестового скрипта. ЧиТД. во первых мне лень отгадывать о котором скрипте речь, во вторых у тебя есть оракл, ты и без меня можешь прогнать все, что тебе вздумается. хочешь показать проблему зависимостей - показывай. не стесняйся. Dimitry Sibiryakov realtime multimaster репликация для Firebird просто работает. в этом и проблема - никому не нужна простая репликация для Firebird, но всем нужна не простая для оракла, которая выдерает изменения из лога не нагружая сервер и соответственно нормально масштабируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:11 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer SergSuperА гемор в числах не напрягает? Тоже ведь писать приходится IS NULL or a = 0 И часто Вам приходится такое писать? Можно пару примеров из бизнес-логики? ну наверное реже чем со строками, но тоже приходится например считается задолженность как основной долг+начисленные проценты-погашенные проценты-погашение долга операций по 3-м последним может не быть и сумма будет null softwarer SergSuperНо можно NULL использовать, тогда будут дополнительные возможности, которых в оракле то и нет :) И на которые мы вдвоём накопали один пример реального применения... я пару примеров привел /topic/771770&pg=5#9062340 /topic/771770&pg=5#9063040 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Gluk (Kazan) А кто сказал, что в Oracle репликацию можно делать только Stream-ом? Ну так пойди в тему по ссылке и осчастливь автора знанием - чем же в Oracle можно сделать нужное ему, если Stream-ы облажались. А смысл? Dimitry Sibiryakov Gluk (Kazan) А вот Stream в FB придется искать очень пристально и долго Как и логи. Зачем там бесполезный прибамбас, который даже в Оракуле работает в зависимости от фазы Луны?.. Затем же зачем и в Oracle :) Для маркетингу. Звучит красиво, народу нравится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:16 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! в этом и проблема - никому не нужна простая репликация для Firebird, но всем нужна не простая для оракла Ну тогда теперь твоя очередь рассказывать какая же репликация всем нужна для Firebird, а я буду описывать ад, через который придётся пройти чтобы её получить. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSЕсли переформулировать задачу как требуется отличать незаданные/неприменимые аттрибуты и аттрибуты, инициализированные дефолтными значениями , то возможно задача не окажется такой-уж и редкой Во-первых, про "дефолтные значения" тут написано что-то.. имхо вообще не в тему. А вообще - ну дык называйте, смелее. Конкретные примеры. Чем больше, тем лучше. А то ради одного-двух случаев городить огород... StalkerSа слегка модифицированный пример задачи с моей прошлой работы. Задача была решена по-другому, но одно из решений было Думаю, мы оба способны выдать немало причин, почему эту задачу не стоило решать таким образом. Собственно, посчитайте сами, сколько натяжек необходимо принять, чтобы счесть это серьёзным примером. Мне бы хватило одного только "тонкого момента" - пустые строки в значении "надо заполнить потом" почему-то есть, а вот для числовых характеристик ничего подобного нет, никакого null/пустой строки не используешь. А для перечислений - только если вносить в справочник "пустую строку", за что тоже стоит отрывать руки. StalkerSэто надо понимать так, что у вас есть продолжительный и плодотворный опыт работы с обоими системами? Существенно отличный от нуля. StalkerSнет, в дотнет value типы по определению не могут быть null. Т.е. никаких if obj = null then быть не может по определению. В последних версиях появились nullable варианты этих типов, но это по-сути новые типы данных. Однако, видимо из подобных-же рассуждений об абстрактном удобстве для сферического программиста в вакууме, в vb возможно присвоение этим типам nothing, что в реальности приводит к получению ими дефолтных значений, а на деле может привести к серьезным багам Если тип not null, то возможность присвоить ему null и происходящее при этом присвоение некоего "дефолта" - безусловно, плохое решение. Такая возможность иногда полезна, но пользоваться ей следует осознанно, а не "автоматом". В этой части решения я не вижу никакого соответствия обсуждаемой теме, поскольку not null колонке или переменной ни один сервер присвоить null вроде как не позволит. В null.toString() == "" я в общем-то никакого криминала не вижу, скорее наоборот, полагаю разумным и удобным. StalkerS"Не то, к чему я привык" - вовсе не всегда "удобство", часто наоборот. Безусловно. Именно поэтому стоит пробовать и сравнивать фактический материал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:21 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)А смысл? Чтобы смелое заявление "в Oracle репликацию можно делать не только Stream-ом" не осталось пердежом в лужу голословным. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Gluk (Kazan)А смысл? Чтобы смелое заявление "в Oracle репликацию можно делать не только Stream-ом" не осталось пердежом в лужу голословным. ты не поверишь, до какой степени мне плевать на твои неумелые подначки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:26 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer"пять пробелов" имеют единственный смысл - мусорить в данных. Именно. Но если вдруг такое безобразие все-таки просочилось в текстовое поле в БД, то давайте его тоже считать за null, т.к. смысла в таком значении атрибута все равно никакого, а удобства в приведении к null - навалом. Это было бы логичным продолжением Вашей подмены '' на null, как мне показалось. VadimInfo, правда, допускает у пяти пробелов какой-то смысл в какой-то гипотетической предметной области. softwarerХм. Для сержанта такая точка зрения, в общем, ожидаема ;-) Устав и два наряда вне очереди. Честно говоря, не очень понял этот переход на личности. Я имел в виду, что когда одному удобно правостороннее движение, другому левостороннее, третьей ездить на красный, т.к. у нее машинка красненькая, то, возможно, лучшим компромиссом для всех является принятие ПДД и их соблюдение. Отказ от стандартов должен по хорошему иметь что-то более весомое, чем удобно-неудобно, и если Ваша (оракловая) фишка реально востребована и нужна, приводить к изменениям самого стандарта. Никаких нарядов - где Вы разглядели? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklin_модСтрока - набор символов. Нет символов - нет строки, т.е. null Да щаз... Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperну наверное реже чем со строками, но тоже приходится например считается задолженность как основной долг+начисленные проценты-погашенные проценты-погашение долга операций по 3-м последним может не быть и сумма будет null То, что "сумма будет null" - большая глупость стандарта, безусловно. Я уже давно говорю, что арифметические операции с null аргументами должны приводить не к null, а к exception. Тем не менее, не очень понимаю, где Вы там собрались писать условие вида a is null or a = 0. То, что Вы написали, реализуется примерно так: Код: plaintext SergSuper я пару примеров привел /topic/771770&pg=5#9062340 /topic/771770&pg=5#9063040 На один я уже высказался насчёт nvl2. Другой - меня смущает назначение платежа "пустая строка", но имхо это делается опять же иначе, причём вне зависимости от сервера и соглашения о пустых строках: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:36 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ну тогда теперь твоя очередь рассказывать какая же репликация всем нужна для Firebird, а я буду описывать ад, через который придётся пройти чтобы её получить. та которая осилит репликацию задачи типа TPC-C под нагрузкой хотя бы 50к tps так, что с зависимостями - очередная газификация лужи окончена или еще будут попытки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:41 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperИменно. Но если вдруг такое безобразие все-таки просочилось в текстовое поле в БД, то давайте его тоже считать за null, (пожимая плечами) Мне, в общем, безразлично. Если сервер начнёт trim-ать значения в строковых полях - я, пожалуй, сочту это вполне удобным (включая все последствия, например, срабатывание not null на пяти пробелах). Sgt.PepperVadimInfo, правда, допускает у пяти пробелов какой-то смысл в какой-то гипотетической предметной области. Я обозначил такую предметную область - хранение программ на whitespace. Другой, честно говоря, не готов вообразить. Sgt.PepperЧестно говоря, не очень понял этот переход на личности. Считайте не очень удачной шуткой без какого-либо желания вызвать отрицательные эмоции. Sgt.PepperЯ имел в виду, что когда одному удобно правостороннее движение, другому левостороннее, третьей ездить на красный, То до тех пор, пока они ездят каждый по своей дороге, "стандарт" им, в общем, нафиг не нужен. Sgt.Pepperто, возможно, лучшим компромиссом для всех является принятие ПДД Возможно, конечно. Но далеко не факт. В Израиле, например, в шаббат дорожное движение... существенно уменьшается. Для них это, полагаю, вполне оправданно. Скажите пожалуйста: Вы хотите, чтобы в правила было внесено ограничение на поездки в автомобиле по пятницам и субботам? Только ради того, чтобы все соблюдали единый стандарт? Sgt.PepperОтказ от стандартов должен по хорошему иметь что-то более весомое, Для начала, введение стандарта должно быть обосновано чем-то весомым. Не надо начинать с середины Я бы сказал так: лучше никакого стандарта, нежели плохой стандарт. Тому, который есть - до хорошего ещё очень далеко. Поэтому я приветствую оправданные отступления от него. Sgt.Pepperи если Ваша (оракловая) фишка реально востребована и нужна, приводить к изменениям самого стандарта. Я согласен с этим как с частью идеального, правильного подхода, но, к сожалению, мерзкие политические соображения вряд ли приведут к возможности такого подхода в обозримом будущем. Стандарт формируется политикой не меньше, чем технологией, и в свою очередь является политическим инструментом. В результате это - нежизнеспособная хрень имени декларации добрых намерений. Мне вот до сих пор интересно, есть ли хоть один сервер, в котором реализована прописанная в стандарте конструкция except (со смыслом ораклового minus). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! та которая осилит репликацию задачи типа TPC-C под нагрузкой хотя бы 50к tps Не, писькомерятельской репликации для Firebird действительно не существует. Но и через ад проходить не придётся, ибо некому. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerМне вот до сих пор интересно, есть ли хоть один сервер, в котором реализована прописанная в стандарте конструкция except (со смыслом ораклового minus). MSSQK ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:04 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerSergSuperну наверное реже чем со строками, но тоже приходится например считается задолженность как основной долг+начисленные проценты-погашенные проценты-погашение долга операций по 3-м последним может не быть и сумма будет null То, что "сумма будет null" - большая глупость стандарта, безусловно. Я уже давно говорю, что арифметические операции с null аргументами должны приводить не к null, а к exception. а там нет арифметических операций с null-ами, там просто данных нетsoftwarer Тем не менее, не очень понимаю, где Вы там собрались писать условие вида a is null or a = 0. То, что Вы написали, реализуется примерно так: Код: plaintext ну собственно я и "a is null or a = 0" не писал - вместо этого coalesce (a, \'\') softwarer SergSuper я пару примеров привел /topic/771770&pg=5#9062340 /topic/771770&pg=5#9063040 На один я уже высказался насчёт nvl2.это хуже - первую переменную надо два раза писать softwarerДругой - меня смущает назначение платежа "пустая строка" я там несколько всё упростил - на самом деле есть шаблон назначения платежа, в нем есть некие идентификаторы (не знаю как правильно назвать), которые должны заменяться значениями функций т.е. это не должно смущать softwarer, но имхо это делается опять же иначе, причём вне зависимости от сервера и соглашения о пустых строках: Код: plaintext а вернуть она может пустую строку и это должен быть окончательный результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
_мод Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. И? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperну собственно я и "a is null or a = 0" не писал Значит, кто-то где-то потерял контекст разговора :) Потому как я спрашивал именно про такую конструкцию и Вы ответили "не так часто, как со строками, но приходится". SergSuperэто хуже - первую переменную надо два раза писать Это "хуже" сполна компенсируется отсутствием nvl-ей в выражениях вида a || b. SergSuperнет, так не пойдёт - если первая функция что-то вернула, то этот результат и возвращается, если ничего не вернула - то считается следующая функция а вернуть она может пустую строку и это должен быть окончательный результат Прошу прощения, сейчас кодирую на Java и недопереключился :) Имелось в виду Код: plaintext 1. 2. 3. Надеюсь, так - вопросов не возникнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:26 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerЭто "хуже" сполна компенсируется отсутствием nvl-ей в выражениях вида a || b.таки значит есть что компенсировать? softwarer Код: plaintext 1. 2. 3. Надеюсь, так - вопросов не возникнет.не возникает - то что выкрутиться всегда можно - кто ж с этим спорит у нас вот пробел решили вместо пустой строки писать - тоже решение а насчет отсутствия nvl-ей в выражениях вида a || b - в принципе я согласен, логично было бы например ввести еще какое-нибудь сложение строк которое бы в null всё не превращало, например вместо плюса те же две палки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 18:54 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperтаки значит есть что компенсировать? в принципе я согласен, логично было бы например ввести еще какое-нибудь сложение строк которое бы в null всё не превращало, Ну дык собственно в Oracle оно и введено :) Если же ставить вопрос как "стоит ли вводить две операции сложения строк, одна из которых превращает, другая нет, только ради того, чтобы сэкономить несколько символов в Вашем примере" - я бы наверное сказал таки, что не стоит. Багов будет больше, чем выгоды. SergSuperто что выкрутиться всегда можно - кто ж с этим спорит Я бы поспорил, кто "выкручивается". Передавать два значения в двух переменных по мне - нормально, решение по умолчанию, а вот запихивать, как Вы хотите, в одну переменную сразу и признак "значение найдено" и само найденное значение - хакерство, привет из тёмного прошлого, одного уровня с "если возвращается значение < 0, то это не Id, а код ошибки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 19:16 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperПонимаете, тут Вы допускаете, что пробелы гипотетически могут быть какой-то инфой в какой-то предметной области, но примеров таких не приводите, считая, очевидно, Ваше утверждение и так достаточно убедительным аргументом. (Ну, говоря Вашими словами, что может означать 5 пробелов в поле ФИО?). А с пустой строкой говорите, что она кроме как сбить с толку нафиг не нужна, несмотря на то, что кто-то пытается приводить Вам конкретные примеры. Об убедительности я не думал. Скорей речь идет о сомнениях в пользе пустых строк, но только до выяснения обратного. Из всего что я знал, польза была как попытка их трактовать как свойство отсутвует. Отсутсвие символов, делает ее похожей на NULL - отсутствие значений для любых типов: не даром же их и отождествляют. Примеры что приводили казались тоже искусственными или предназначеными для прогерства. Ну 5 прробелов все же строка не пустая. И даже мож в какой-ить БД про шифорования или там еще какой может найти применение. Но даже если нет, то скорей всего, заменить ее луче чем то другим отличным от NULL, не связанным с отсутсвием. Мож и заменят чем-нить. Но видно это пока редкое явление. Хотя Вы правы. С пол года назад прихоли парни консультироваться почему запрос не так работает в какой-то их БД. Были очень не довольны, уже чуть ли не волосы на себе рвали. Я почти сразу заподозрил пять пробелов, но все же не сходу. Пару минут был сбит с толку: по каким-то причинам они там не ожидались, но оказались. А вот на пустые строки нарываюсь чаще. Я в Аксцессе все же реже. И иногда забываю про ловушку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 19:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoНу 5 прробелов все же строка не пустая.а два? два пробела - пустая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 22:04 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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, которые Вы бы не хотели писать, но зато сохранится возможность для других использовать в конкретном случае конкретный вариант, да и стандарты не нарушим. Неужели плата так велика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 22:06 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорvadiminfoНу 5 прробелов все же строка не пустая.а два? два пробела - пустая? Ну если смотреть в сторону арифметических подходов, то нужна повышеная осмотрительность. Если проявлять приемлемую обеспокоенность по поводу возможной чрезмерной иррациональности пустой строки в сильно типизированных моделях данных то , скорее всего, можно предположить с разного рода оговорками, что и два пробела для пустй многовато будет. По видимому, одна тысячная пробела может в ряде случаев отдельными исследователями рассматриваться как некоея приближение оного в некоторых тестах для полуструктурированных МД.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 23:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoНу если смотреть в сторону арифметических подходов, то нужна повышеная осмотрительность. Если проявлять приемлемую обеспокоенность по поводу возможной чрезмерной иррациональности пустой строки в сильно типизированных моделях данных то , скорее всего, можно предположить с разного рода оговорками, что и два пробела для пустй многовато будет. По видимому, одна тысячная пробела может в ряде случаев отдельными исследователями рассматриваться как некоея приближение оного в некоторых тестах для полуструктурированных МД.. Имелось в виду, что и пустая строка и строка из 2-5 пробелов создают практически идентичную проблему в смысле отсутствия смысла в такой инфе в поле ФИО. Так почему, решая проблему с пустой строкой путем автоматического преобразования ее сервером к null, не поступать так же и с полем из пробелов? А далее и с любым другим набором символов - "как нам кажется строковым мусором", который удастся формализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 23:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperИмелось в виду, что и пустая строка и строка из 2-5 пробелов создают практически идентичную проблему в смысле отсутствия смысла в такой инфе в поле ФИО. Так почему, решая проблему с пустой строкой путем автоматического преобразования ее сервером к null, не поступать так же и с полем из пробелов? А далее и с любым другим набором символов - "как нам кажется строковым мусором", который удастся формализовать? Возможно, кроме ФИО есть другая инфа, где не пустые строки могут иметь смысл. Но ведь в любом случае в них не отсутсвуют символы. Т.е. если ее чем-то и стоит заменять, то скорее всего не null - отсутсвие значения. Пустая строка - отсутсвие символов, ну близко к осутствию значения, но тем ни менее моно считать и значением. Как отсутсвие оно слабее null (тока строковый тип), а как значение не имеет особого смысла. При замене с помощью null пробелов или еще чего там, что может не означать смысла никада, возможно, есть дополнительные риски. Наверное, там нужны какие-то исследования. Но в целом Ваша идея лично мне кажется заманчивой. Возможно, тут вместо null подошло бы waste - мусор. Можно придумать типа пятизначную логику: Ложь, Истина, Не известно, Не определено, Мусор. Посмотреть есть ли от этого польза. А пустые строки пока выкинуть (не ясно что это, мусор, значения, и вообще), до выяснения новых обстоятельств. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 23:50 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.Pepper Имелось в виду, что и пустая строка и строка из 2-5 пробелов создают практически идентичную проблему в смысле отсутствия смысла в такой инфе в поле ФИО. Так почему, решая проблему с пустой строкой путем автоматического преобразования ее сервером к null, не поступать так же и с полем из пробелов? А далее и с любым другим набором символов - "как нам кажется строковым мусором", который удастся формализовать? мое имхо потому, что вместо нулла веб клиент присылает именно пустую строку, лишая всякого смысла где-то дальше пытаться искусственно разъединить эти понятия ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 01:19 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Можно можно записать в varchar not null строку '' ? Можно создать уникальный индекс по полю, где многократно встречаются '' ? З.Ы. Нет оракла под рукой ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 01:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerSergSuperтаки значит есть что компенсировать? в принципе я согласен, логично было бы например ввести еще какое-нибудь сложение строк которое бы в null всё не превращало, Ну дык собственно в Oracle оно и введено :) Если же ставить вопрос как "стоит ли вводить две операции сложения строк, одна из которых превращает, другая нет, только ради того, чтобы сэкономить несколько символов в Вашем примере" - я бы наверное сказал таки, что не стоит. Багов будет больше, чем выгоды.нет, мои примеры такого не требовали softwarerSergSuperто что выкрутиться всегда можно - кто ж с этим спорит Я бы поспорил, кто "выкручивается". Передавать два значения в двух переменных по мне - нормально, решение по умолчанию, а вот запихивать, как Вы хотите, в одну переменную сразу и признак "значение найдено" и само найденное значение - хакерство, привет из тёмного прошлого, одного уровня с "если возвращается значение < 0, то это не Id, а код ошибки".да тут бесполезно спорить, кто как делает тот так и считает правильным я вот напишу что аналогия неудачная и логичней когда вся информация о строке в ней и содержится, тем более что возможности для этого предусмотрены, Вы не менее обоснованно ответите я вот частенько смотрю оракловский код и думаю насколько было проще если бы были нулы как у микрософта, уверен что Вы что-то подобное думаете про микросовтовский мне такое поведение кажется уж очень очевидно неправильным и было интересно понять тех, кому это кажется нормальным вроде понял, но "я думаю, Владимир Зенонович, последнее слово будет не за вами" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 01:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 чем '', если декомпозицию не делать. никакого искажения реальности нет, есть разные способы отображения реальности в модели. И иметь отсутствующие аттрибуты в таблице сущности вполне можно. И если сервер толкает меня к определенным решениям только на основе технической реализации, то это не есть хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 04:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerЯ бы сказал так: лучше никакого стандарта, нежели плохой стандарт. Тому, который есть - до хорошего ещё очень далеко. Поэтому я приветствую оправданные отступления от него. Но стандарты всё-же просачиваются в Оракл. Давно ль хором декламировали: JOIN, CASE, WITH у нас нет и нахер не нужно Глядишь и опция CONCAT_NULL_YIELDS_NULL появится. softwarerМне вот до сих пор интересно, есть ли хоть один сервер, в котором реализована прописанная в стандарте конструкция except (со смыслом ораклового minus). ещё 1 Код: plaintext 1. 2. 3. 4. 5. 6. З.Ы. по теме: Да, в некоторых областях оракл впереди всех. Нет, гордится этим как своим достижением не стоит (даже если ты индус). Нет, во все дыры пихать оракл нецелесообразно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 05:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
sn1251 Но стандарты всё-же просачиваются в Оракл. Давно ль хором декламировали: JOIN, CASE, WITH у нас нет и нахер не нужно Собственно я не слышал, чтобы говорилось, что JOIN или рекурсивный WITH не нужны (под предлогом того, что есть legacy конструкции), зато много слышал, что реализация того же JOIN в Oracle 9, к примеру, далека от идеала Кроме того, раньше не понимал, для чего может быть нужен INNER JOIN (серьезно столкнувшись с MySQL понял для чего ). Так что не нужно путать теплое с мягким. Собственно позиция того о чем Вы говорите складывалась из двух пунктов: 1. 8i - у нас нет JOIN (если склероз не изменил), но мы особо не страдаем, поскольку (+) работает, да и выглядит лаконичнее (имея при этом некоторые ограничения в использовании) 2. 9i - JOIN есть, но работает так хреново, что лучше пользоваться (+) На мой взгляд, это далеко не "у нас нет и нахер не нужно", да и пользователи других СУБД поступают ровно таким-же образом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 08:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорМожно можно записать в varchar not null строку '' ? Можно создать уникальный индекс по полю, где многократно встречаются '' ? 1. нет 2. можно. на пустые строки уникальность распространяться не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 08:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорМожно можно записать в varchar not null строку '' ? Можно создать уникальный индекс по полю, где многократно встречаются '' ? Ну вот как бы по моим понятиям, Оракл '' не записывает в таблу, а записал значения отсутсвует null, поскоку запросы на = '' возвращают пустые строки, а на is null возвращают добавленное. Скрипты в ветке приводил. Поэтому как бы инсерт в колонку varchar not null не долженн пройти. А что до индекса, то поскоку возможность занести '' как в Аксцессе не очевидна, то вопрос луче переформулировать. Т.е. есть моно считать что в таблах Оракла в полях типа varchar значение '' обнаружить далеко не всем удается после многих попыток исертов и апдэйтов в плане запосов содержащих = '' или там LENGTH(а) = 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 09:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSникакого искажения реальности нет, есть разные способы отображения реальности в модели. И иметь отсутствующие аттрибуты в таблице сущности вполне можно. И если сервер толкает меня к определенным решениям только на основе технической реализации, то это не есть хорошо Разные то они есть, и применить то можно, но нельзя быть довольным токой моделью, скорее всего. Ить это все равно что кмокингу одеть шапку ушанку, я думау. Я вседа честно старюсь говорить коллегам, что если не получилось избежать в модели таких изъянов. Луче этого никада не скрывать, и не делать вид что все хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 09:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорМожно можно записать в varchar not null строку '' ? Нет. Зайцев ФёдорМожно создать уникальный индекс по полю, где многократно встречаются '' ? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 09:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Кроме того, раньше не понимал, для чего может быть нужен INNER JOIN жесть конечно. В принципе понятно, почему те, кто видел только oracle и ничего больше, придерживаются таких странных взглядов, иногда кажущихся со стороны дикими. Ну и естественно все кажется уникальным. p.s. Gluk (Kazan), Ваша цитата просто как пример. Ничего личного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmGluk (Kazan)Кроме того, раньше не понимал, для чего может быть нужен INNER JOIN жесть конечно. В принципе понятно, почему те, кто видел только oracle и ничего больше, придерживаются таких странных взглядов, иногда кажущихся со стороны дикими. Ну и естественно все кажется уникальным. p.s. Gluk (Kazan), Ваша цитата просто как пример. Ничего личного. Ага, только ты забыл спросить, почему inner join понадобился в MySQL :) Это жесть куда большая, поверь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:37 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerЗайцев ФёдорМожно можно записать в varchar not null строку '' ? Нет. Зайцев ФёдорМожно создать уникальный индекс по полю, где многократно встречаются '' ? Да. т.е. в первом случае '' is not null, а во втором - очень даже is null по-моему, это не совсем очевидно. ввс я не виду причин, по которым должно быть именно так, а не наоборот или ещё как-нибудь по-другому З.Ы, я всё ещё на тему наразличимости '' и null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:58 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдор бредsoftwarerЗайцев ФёдорМожно можно записать в varchar not null строку '' ? Нет. Зайцев ФёдорМожно создать уникальный индекс по полю, где многократно встречаются '' ? Да. т.е. в первом случае '' is not null, а во втором - очень даже is null по-моему, это не совсем очевидно. ввс я не виду причин, по которым должно быть именно так, а не наоборот или ещё как-нибудь по-другому З.Ы, я всё ещё на тему наразличимости '' и null пардон, не проснулся. burn 0,5 рулит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдор, burn жжот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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да и стандарты не нарушим. Это стоит ещё меньше, чем лишние символы, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдорт.е. в первом случае '' is not null, а во втором - очень даже is null Да нет, в обоих случаях '' is null. Во всяком случае, так следует из написанного. Возможно, Вы подразумевали не то, что написали, конечно :) Зайцев Фёдорпо-моему, это не совсем очевидно. я всё ещё на тему наразличимости '' и null Видите ли в чём дело.... они физически неразличимы. У них одно представление в дампе БД. Поэтому найти пример, где они различимы, будет.... непросто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:58 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Хм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? меньше писанины, проще код, более логично в современном мире веба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperда тут бесполезно спорить, кто как делает тот так и считает правильным Я не вижу причин всерьёз спорить об этой детали в рамках нашей основной темы. Но и не сказал бы, что бесполезно - вполне себе содержательная тема для "программирования вообще". SergSuperя вот частенько смотрю оракловский код и думаю насколько было проще если бы были нулы как у микрософта, уверен что Вы что-то подобное думаете про микросовтовский Дык я, собственно, и прошу привести примеры такого кода, где "насколько бы проще". С nvl/nvl2 уже увидели. Пример nvl vs || я тоже уже привёл. SergSuperмне такое поведение кажется уж очень очевидно неправильным Неправильное - это либо "неудобное", либо "удобное, но всё равно неправильное, потому что Иван Иваныч сказал, идеология должна быть другой". Второй вариант - меня не вдохновляет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:06 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSДа и дело тут не в том как "правильно" делать, а в том, что определенный подход становится недоступным. По сути сервер на ровном ограничил меня в выборе альтернатив. (пожимая плечами) Вы не протестуете против того, что тип number представляет только действительные числа и не содержит мнимой части? По сути сервер на ровном месте ограничил Вас в выборе альтернатив. StalkerSкажется вы там страницу назад писали что-то про один проект или около того.. Я делал проект на MSSQL, несколько раз работал с IB/FB-проектами, немного с MySQL и кроме того, довольно много возился с перекачками данных. При этом я никогда не пытался "приходить со своим уставом в чужой монастырь", каждый раз честно смотрел "как тут принято", пробовал работать именно так и искал ответы на вопрос "почему". StalkerSто неудивительно что кажется непривычным и "неудобным" Вы второй раз употребляете слово "кажется", на этот раз не по адресу. StalkerSпочему нет соответствия, аналогия очень даже существенная - при присвоении null на самом деле присваивается нечто "не-null", Плюньте в лицо тому, кто Вам сказал такую глупость. В оракле при присвоении null присваивается null. В том числе при присвоении пустой строки присваивается null. Соответственно, аналогия "при присвоении null присваивается не-null" - мягко говоря, неуместна. StalkerSтут не понял, null.toString() вызовет исключение в любом случае по очевидным причинам, Ну и плохо. Я уж думал, микрософт не поленился сделать получше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:21 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:27 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerlockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии. с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!lockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? меньше писанины, проще код, более логично в современном мире веба. писанины если не ровно столько же, то меньше И веба в момент принятия решение не было, тем более - современного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
locky писанины если не ровно столько же, то меньше И веба в момент принятия решение не было, тем более - современного. когда принимаются решения по критериям логично и удобно, не удивительно, что они совпадают. писанины гораздо меньше, читайте ветку - примеры даны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:38 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockysoftwarerlockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии. с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот Меня радует уместная категоричность. Поясняю: когда проектировали формат хранения, видимо, решили, что каждое значение имеет размер, чаще всего динамический, и соответственно решили хранить как [длина, байт1, байт2, ...]. Null решили хранить как значение длины 0, то есть в файле БД ему соответствует либо один байт (длина = 0), либо вообще ничего (если в конце строки). Когда реализовывали varchar, строку 'abcde', вполне естественно, решили хранить как [5, 'a', 'b', 'c', 'd', 'e']. И в этот момент "совершенно случайно" оказалось, что null и пустая строка хранятся физически одинаково, как [0]. Есть у меня подозрение, что на самом деле примерно так всё и было, а идеологии - дело более позднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? Ну как же? Значения могут не иметь не тока строуки. Т.е. null более общее для всех типов. Кроме того, оно типа не транслируется, а объявлентся что значения нет. Ну и так по мелочам. Там пустая строека типа похожа на 0 для числовых, но числовые тоже могут не иметь значения, даже 0. Тада если пустая строка отранслировалась сюда, то она не похожа становится на 0. А зачем это надо. Кроме того, пустая строка разными челами по разному понисается: для кого есть такое значение в плане там равенства, а для кого то нет. А с null таких заморочек вроде нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockysoftwarerlockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии. с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот Нет никакого "вместо". Технически это одно и тоже значение. Как правильнее: "держать" A вместо A, или наоборот? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 13:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Что до отношения Оракла к пустым сторкам, то вот из справки. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 13:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerlockysoftwarerlockyХм. а почему именно пустая строка транслируется в null? Почему не наоборот - null в пустую строку? Боюсь, это вопрос уже не к нам :) Подозреваю, "в далёкие xxxдесятые годы" это вообще был вопрос больше технической реализации (значение с длиной 0), нежели чистоты идеологии. с т.з. технической реализации проще держать именно пустую строку вместо null, нежели наоборот Меня радует уместная категоричность. Поясняю: когда проектировали формат хранения, видимо, решили, что каждое значение имеет размер, чаще всего динамический, и соответственно решили хранить как [длина, байт1, байт2, ...]. Null решили хранить как значение длины 0, то есть в файле БД ему соответствует либо один байт (длина = 0), либо вообще ничего (если в конце строки). Когда реализовывали varchar, строку 'abcde', вполне естественно, решили хранить как [5, 'a', 'b', 'c', 'd', 'e']. И в этот момент "совершенно случайно" оказалось, что null и пустая строка хранятся физически одинаково, как [0]. Есть у меня подозрение, что на самом деле примерно так всё и было, а идеологии - дело более позднее. про null bitmap уже написали что касается же тех. реализации... как мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null оракл вроде как на сях писаный, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 13:54 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
locky как мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null оракл вроде как на сях писаный, не? Сие не зависит от языка, а исключительно от разработчиков. MS SQL скорее всего тоже на сях написан (а уж Firebird - наверняка), что им не мешает корректно различать NULL и пустую строку. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 14:10 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov locky как мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null оракл вроде как на сях писаный, не? Сие не зависит от языка, а исключительно от разработчиков. MS SQL скорее всего тоже на сях написан (а уж Firebird - наверняка), что им не мешает корректно различать NULL и пустую строку. Значит в команде разработчиков Оракла, видимо, человек, ответственный за реализацию строковых данных был несколько.. Инако? Альтернативно? Мыслящ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 14:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockyпро null bitmap уже написали null bitmap mssql-я никак не связан с техническими удобствами разработчиков Oracle. lockyкак мне кажетсо, для разработчиков было бы проще оперерировать именно со строками нулевой длины, нежели со строками, которые могут быть null Я полагаю, что это далеко не факт (для примера можно, скажем, упомянуть о необходимости контролировать ограничение на длину varchar-переменных), и совершенно уверен, что представление об "оперировать", возникающее сейчас, кардинально отличается от того, что было в первых ораклах в семидесятых годах, когда не было ни PL/SQL, ни большей части возможностей SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 14:23 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockyЗначит в команде разработчиков Оракла, видимо, человек, ответственный за реализацию строковых данных был несколько.. Инако? Альтернативно? Мыслящ. Вообще-то Oracle изначально был написан на ассемблере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 14:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
какая хорошая философская темка )) И про FB и пустые строки. Я про пустые строки. Совершенно очевидно, что Oracle сегодня, скажем урощённо, лучшая субд. И всё же. Совершенно очевидно, что считать пустую строку как NULL не правильно. Так же не правильно как и считать строку с пробелом тоже как NULL. NULL - значение не задано (возможно, потому что неизвестно). '' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL. В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно! Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО. Есно идеальных систем всё проверяющих не существует, но к ним стремятся. А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои). PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности? А чек-констреинты зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 14:41 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 в декларации поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 15:06 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_fox Совершенно очевидно, что считать пустую строку как NULL не правильно. Так же не правильно как и считать строку с пробелом тоже как NULL. Все же это не совсем удачное сравнение. Пробелы - не пустая строка, не претендует чтобы ее считать NULL. Ну, действительно отсутсвие значение похоже на пустую строку, потому что последняя тоже не имеет каког-либо значения. А пробелы мы просто не видим, но их таки можно нарисовать. Поэтому если второе не правильно, но из этого нельзя, скорее всего, вывести, что первое не правильно: отсутсвие и пустота так или иначе присущи обоим из первого, но не второго утвержденния. Сам термин "правильно" означает соответсвовать каким-то правилам. Но о каких правитлах здесь речь? Скорее пока здесь можно вечти речь о более рациональном и не рациональном. По крайней мере, из того что здесь было ранее сказано. web_fox NULL - значение не задано (возможно, потому что неизвестно). '' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL. Так она вролде и выдает Код: plaintext 1. Код: plaintext 1. web_fox В-третьих как уже было сказано в теме, соверешенно очевидно, что любые операции с NULL должны приводить к исключению, а не к NULL. Это же, #####, совершенно очевидно! Но разве не был прав Каперник когда пошел против очевидности (очевидно было что земля стоит на месте, а он сказал что крутится). Шуткэ. Вот операции с NULL могут быть разными. Например, сравнение с NULL может возвращать НЕ известено что. В общем исключения совсем не очевидны: их и так полно. web_fox Считаю, если пользователь имеет ВОЗМОЖНОСТЬ вводить в адрес всякий мусор, типа пустых строк, пробелов и т.п., то в первую очередь ВИНОВАТ РАЗРАБОТЧИК ПО. Есно идеальных систем всё проверяющих не существует, но к ним стремятся. А идеальная система - это что? "Это система, которая не позволяет пользователю ошибаться" (слова не мои). Он и может и вводит. Ну виноватых искать это как бы другое. Это пусть они там сами разираются как хотят. А то мы с Вами счас понапишем и бум сами во всем виноваты потом. web_fox PS не нравится писать IS NULL OR =''? А трим по пробелам от всей строки на пустую строку чего не проверяете для полной кошерности? А чек-констреинты зачем? Не нравится пол дела. Не нравится, что не сразу понял, что это надо писать. Вот тока вчера в Аксцессе запрос, который много лет как использовался, вдруг выдал ноль записей на IS NULL, на = '' все записи таблы. О как блин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 15:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
не то скопировал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 15:19 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 15:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 16:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoне то скопировал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Ну это дико, конечно. Написав по-человечески, получаем: 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 Всё чётко, с точки зрения значения. Но. Так это явно ошибка в бизнес-логике. И должно быть исключение, чтобы программист перепроекторовал программу и сложение с <неизвестно чем> не применялось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 16:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
А, как всенепременно известно, "костыль" рано или поздно "вылазит". И тут ничинается. Кто-то уславливается, что будем писать пробел, если "действительно пустая строка", кто-то два дефиса, кто-то по другому - как фантазия позволяет, у каждого свои "спец-символы". Особенно это развито в веб-программировании с пустым значением в теге select. Так костыли начинают плодится и размножаться, потому, что если есть костыль в одном месте, нужно компенсировать его в другом - если NULL и '' одинаковые, то нужен ещё костыль - конкатенация не приводит к NULL(!). Любое исключение из правил порождает ещё пачку дополнительных исключений из правил. "Костыль" сегодня не вылез - повезло, будем писать так и дальше. Например, в PHP костыли вылазят часто. В Oracle чуть реже, но это всё равно "костыль". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 16:26 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_fox Ну это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1. дико это путать конкотенацию с арифметическими операциями. конкатинировать пустую строку и не получать нулл в результе это удобно и логично. а вот придумывать идиотские предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам. думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории. И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklinИ для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle... Эта цитата присутствует в документации минимум 15 лет. Вполне вероятно, будет присутствовать и тогда, когда стандарт наконец перепишут в соответствии со здравым смыслом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
pkarklin И для кого, интересно, vadiminfo выкладывал цитату из документации по Oracle... точно не для меня, в отличие от большинства спорящих тут я оракловую документацию прочел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! дико это путать конкотенацию с арифметическими операциями. Не понял. Уточните, кто где что путает и причём тут я. Только содержательно, пожалуйста, чтобы чётко было понятно где такое произошло. Yo.! конкатинировать пустую строку и не получать нулл в результе это удобно и логично. Это костыль, который понадобился, из-за совпадения пустой строки с NULL. Не путайте следствие и причину. Yo.! а вот придумывать предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам. Заменять отсутствие адреса пустой строкой - плохое проектирование. Здесь согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории. Костыль, который применяется в вебе, поможет ораклу, у которого такой же костыль. А что, логично, блин! 8-/ А действительно, пришло из гет-запроса NULL - что это, строка NULL или значение NULL? Логично, ничего не скажешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_fox Не понял. Уточните, кто где что путает и причём тут я. Только содержательно, пожалуйста, чтобы чётко было понятно где такое произошло. "Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1." - вот тут вы путаете арфметическую операцию сложения, которая нигде не даст единицу, с конкотинацией строк, работу которой в оракле вам расжевывали. web_foxЭто костыль, который понадобился, из-за совпадения пустой строки с NULL. Не путайте следствие и причину. путаете только вы, реально же для людей такое поведение не кажется логичным, поэтому вы не найдете в гуе варианта где можно было представить оба этих понятия. люди не поймут им так не удобно. отсюда и гора ошибок регулярно приходиться правит в мсскл, когда в письмах исчезают целые абзацы потому что очередной новичек забыл перед конкотенации проверить на нулл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:49 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строкуну если не веба, то сельского хозяйства. и если не развитие, то хотя бы спад Yo.! и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории. или не будет, как уже случалось в истории. или не будет такой фишки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!думаю развитие веба в конце концов вытеснит искуственные попытки разделить нулл и пустую строку и будет очередная фишка оракла стандартом де факто, как это уже не раз случалось в истории.врядли - в MS SQL 4.2 тоже было как сейчас в оракле, но вовремя сумели перейти отсюда и остался атавизм set ansi_null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperврядли - в MS SQL 4.2 тоже было как сейчас в оракле Вот на это - очень хотелось бы увидеть достойный уважения пруфлинк.... SergSuper, но вовремя сумели перейти отсюда и остался атавизм set ansi_null ... потому что судя вот по этому, Вы плохо понимаете, о чём говорите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 18:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxНу это дико, конечно. Написав по-человечески, получаем: 1 плюс <низвестно что> равняется 1. Но ведь можно и так сказать: к строке '1' дописть ничего, пустоту получится '1'. Ведь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 19:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerSergSuperврядли - в MS SQL 4.2 тоже было как сейчас в оракле Вот на это - очень хотелось бы увидеть достойный уважения пруфлинк.... SergSuper, но вовремя сумели перейти отсюда и остался атавизм set ansi_null ... потому что судя вот по этому, Вы плохо понимаете, о чём говорите. ну по 4.2 документации я уже не найду у меня была уверенность что пустая строка там превращалась в NULL, а сейчас что-то уже засомневался... может и перепутал, 15 лет прошло всё-таки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 19:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuper отсюда и остался атавизм set ansi_null Оно не про строки, оно про null != null, null=null... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 20:06 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 км)", но можем для неинициализированного объекта "строка" вызвать метод "приклеить('некая строка')". Итого: Костыль. Кому-то удобный. Иногда вылазит боком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxОчевидно, что смешивать два разных свойства объекта по значению - это костыль. боюсь, что без применения психотропных препаратов будет проблематично добиться такой очевидности. имхо ваше умение увидеть свойство которого нет прекрасно иллюстрирует фильм ДМБ, когда один из нанюховшихся краски обращается к другому: - суслика видиш ? - нет - и я нет, а он там есть ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Собственно где это вылазит боком. Да везде, где нужно различать между "пользователь задал значение" или "не задавал" касательно строк. Пример про ввод пароля уже приводили. Либо система бесконечно будет пользователя просить ввести пароль, а он будет вводить пустую строку, либо нужно будет иметь в таблице две колонки: булевую колонку "есть ли пароль" и текстовую "пароль". А там уже как решите, можно просить пользователя вводить пароль (пустую строку - просто нажать энтер), либо пускать сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!, чтобы не нюхать краску и не писать чушь про сусликов, прочитайте остальной текст - там объяснение, что все объекты должны вести себя одинаково и одинаково трактовать свойство isNull. Личная просьба: нечего написать по существу - не пишите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:37 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxвсе объекты должны вести себя одинаково и одинаково трактовать свойство isNull. предположим по каким-то причинам инженер по безопасности не вздернул вас за яйца и в какой-то горе системе действительно существует объект пароль, который может быть не задан и может быть задан как blank password. тогда из вашего утверждения "все объекты должны вести себя одинаково" наш знаменитый суслик обязан иметь состояние "суслика не видно но он там есть", чтоб соответствовать blank password. на мой взгляд без применения психотропных препаратов все таки сложновато добиться от всех объектов одинакового поведения. Личная просьба: не обижаться в момент когда столь самоуверенно используете "Очевидно" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Softwarerweb_fox'' - пустая строка и при конкатенации с другимим строкаим должна выдавать ожидаемый результат, а не NULL. А она у кого-то выдаёт null? Выбросьте бяку. Ну судя по коду, приведенному VadimInfo '' при инсерте подменяется на null. Но далее этот null ведет себя как особенный null - типа null_by_emptystring + '1' = '1', а не null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:04 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxYo.! а вот придумывать предназначения пустой строке, аля БОМЖ, ведет к неверной интепритации тех кому приходиться иметь дело с системой в последствии и соответственно к багам. Заменять отсутствие адреса пустой строкой - плохое проектирование. Здесь согласен. А я не совсем согласен. Используешь "плохое проектирование" - получи плохой продукт, используешь хорошее - наоборот, не повод серверу принимать за тебя решения, что нужно лишить строковой переменной ее законного значения. Более того, аппетит приходит во время еды - Softwarer согласен, что и ' ' можно заменить на null, а, продолжая эту логику, и @#ять твою м@ть можно было бы автоматом менять на null, если какие-то дураки используют oracle без соответствующих фреймворков, и если бы "слов немного, всего лишь пяток, но какие из них комбинации" легко бы формализовалась как мусор, типа '' или ' ', то хорошему серверу сам бог велел это делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. Кстати, помимо академического спора, Вам не кажется практичнее прислушаться к таким рекомендациям в плане будущей совместимости? Ведь разработчик сервера - он такой, скажет "мы частично потеряли совместимость, но были вынуждены это сделать в угоду соответствия стандартам". Будет ли Вам утешением тот факт, что "люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов." - не уверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperКстати, помимо академического спора, Вам не кажется практичнее прислушаться к таким рекомендациям в плане будущей совместимости? Ведь разработчик сервера - он такой, скажет "мы частично потеряли совместимость, но были вынуждены это сделать в угоду соответствия стандартам". Будет ли Вам утешением тот факт, что "люди, ездящие по разным дорогам, не особо нуждаются в общем стандарте, и попытка бездумно внести такой и требовать соблюдения "потому что стандарт" влечёт много минусов и мало плюсов." - не уверен. Кажется и я: 1) с крайней осторожностью отношусь к NULL, тем более к пустым строкам и избегаю наскока это возможно. Однако, из сооброжений оптимальности NULL таки приходится использовать, но пустые строки в МД не использовал давно. Мож када-то на Аксцессе пытался, но как писал получились полумеры, в общем забил (зато они сами там нарисовываются время от времени). 2) В настоящее время смотрю на Оракловые БД так, что в таблах нет пустых строк, есть только NULL. Просто тупо из-за того, что проверить есть ли в БД '' не удается, значит использовать не могу. А для меня БД нужна тока ради извлечения инфы, а они типа у меня не извлекались пока. Считаю что '' заменяется на NULL в таблах и запросах, потому надеюсь, что и не придет в голову и пытаться использовать (может в коде хранимых процедур, но это типа не считается: код вторичен, поскоку в общем случае в будующем его проще поменять чем структуру и данные). В силу обоих пунктов в МД у меня пустых строк нет пока, и использовать в голову, надеюсь, не придет. Поэтому все еще надеюсь, что с совместимостью трабл не должно быть. Но продолжаю стараться сохранять бдительность (но не повышенную.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:51 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoВедь <низвестно что> это одна из интепритаций NULL. А есть еще свойство отсутсвует, т.е. ничего. А само NULL это ничего - нет значения.Откройте любую книжку по РМД. NULL - это неопределенное значение . Интерпретация NULL как отсутствие значения, т.е. как вполне определенное специальное значение - ИМХО явная ошибка проектирования. И даже если считать допустимым использование NULL как спец. значение (что ИМХО бред), возможная интерпретация его как неопределенности остается в силе. Именно поэтому конкатенация, как и любая другая операция с NULL значением, должна возвращать NULL. Строка + неизвестно что - это все равно неизвестно что, даже если вместо неизвестно чего м.б. пустая строка (а может и не быть). То же каксается замены вполне определенного пустого значения '' на неопределенный NULL. Так что Оракл допускает явное нарушение не только стандартов, но и реляционной аксиоматики. ЗЫ. Кстати, в DB2: Код: plaintext 1. 2. 3. 4. Так что Oracle в этом плане - единственный извращенец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 02:13 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer(пожимая плечами) Вы не протестуете против того, что тип number представляет только действительные числа и не содержит мнимой части? По сути сервер на ровном месте ограничил Вас в выборе альтернатив. сервер много в чем ограничивает полет фантазии разработчиков. И одно дело когда он это делает вынужденно и совсем другое дело, когда это происходит ради сомнительных удобств. softwarer Ну и плохо. Я уж думал, микрософт не поленился сделать получше. [/quot] вот интересный случай, как среда разработки влияет на мирровозрение. Для меня доступ к методам неинициализированного обьекта - это очень грубый баг разработчика. Среда не должна скрывать такие баги, а просто обязана выкидывать исключение. Дельфи получается тоже таким-же попустительством занимается? эх.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 04:41 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. Favn И даже если считать допустимым использование NULL как спец. значение (что ИМХО бред), возможная интерпретация его как неопределенности остается в силе. Ну как мы можем установить бредовое состояние? А про разные возможности интеритации я тоже разделяю. Favn Именно поэтому конкатенация, как и любая другая операция с NULL значением, должна возвращать NULL. Строка + неизвестно что - это все равно неизвестно что, даже если вместо неизвестно чего м.б. пустая строка (а может и не быть). Должна? Про не известно что согласен. Но про ничего нет + что-то = ничего все еще сомневаюсь. Типа математика допускает разные алгебры, все дело в пользе. Favn Так что Оракл допускает явное нарушение не только стандартов, но и реляционной аксиоматики. Читая книжки про РМД я знаю аксиомы Амстронга (там наличие NULL не предполагается, ну если тока в виде специального определенного значения). Они имеют значение для вывода функциональных зависимостей и польза этого ясна. До других аксиом видать не дочитал. Уточните плиз эти аксиомы, что из них стоящего вывели, чтобы оценить пользу, ну и применть. Я пока не в курсах и считаю NULL вынужденным злом, потому что неопределенности мне не нужны в БД, ввиду их возможности озадачить потребителя информации, и даже сбить с толку в некоторых случаях. Favn ЗЫ. Кстати, в DB2: Код: plaintext 1. 2. 3. 4. Так что Oracle в этом плане - единственный извращенец. Не знаю единственный или нет. Ну что если поменяет со времене, возражать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 09:10 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnЗЫ. Кстати, в DB2: Код: plaintext 1. 2. 3. 4. Еще один пример в поддержку нула в результате ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 09:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
В СУБД Caché пустая строка и NULL - это разные значения: NULL and the Empty String ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 09:36 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 для любого типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 10:22 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnКстати, круче всего должно быть тем бедолагам, которые мигрируют на Оракл с чего-то еще - искать подобную багу "фичу" можно весьма вдумчиво, не веря своим глазам. Этак недолго и в дурку попасть :)ну не знаю, у меня проблем не было, во всяком случае пишу не из дурки :) Favn... Но такого бардака и там не было, любая операция с NULL операндом, кроме is null, по определению возвращает NULL для любого типа.давайте не считать свою точку зрения единственно верной это и к сторонникам оракла относится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 11:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnНо раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что (" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true. Тут вы ошиблись уже в первом своем выводе, так как в Oracle ('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 12:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 одинаково, больше всего все это похоже на сделанную когда-то ошибку проектирования, наследуемую по причине совместимости. Все таки здесь есть, возможно, эмоциональная составляющая. А мы же этого избегаем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 13:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Хм, с поддержкой стандартов у Oracle вообще довольно плохо. Как-то пришлось мне делать систему, которая должна была работать на произвольной БД (ODBC, разумеется) - в результате именно с Oracle было больше всего проблем - практически все типы нестандартные и, формально, вообще нельзя сказать, что то, что в Оракле называлось ODBC драйвером - таковым было (не реализован был даже начальный вариант стандарта). С JDBC примерно тоже - худший из всех драйверов JDBC, который я видел - у Оракла. Начиная с кучи глюков и багов и заканчивая изрядным отходом от стандарта (типа метод по стандарту нужен - но не работает...). Впрочем, пока все java-решения от Оракла, которые я видел - ужасны. Надеюсь, что хоть покупка Сана им поможет, хотя и вряд ли, тут дело, похоже, в головах... :) Впрочем, я вполне понимаю коммерческий смысл такого подхода - наличие уникальных и неочевидных багов сильно привязывает к платформе и повышает цену специалистов. (Ох, а уж что я думаю про Оракловский синтаксический анализатор SQL - лучше не в слух. Хотя, вроде бы, в 10ке от самых идиотских багов избавились). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 13:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
DPH3Хм, с поддержкой стандартов у Oracle вообще довольно плохо. Как-то пришлось мне делать систему, которая должна была работать на произвольной БД (ODBC, разумеется) - в результате именно с Oracle было больше всего проблем - практически все типы нестандартные и, формально, вообще нельзя сказать, что то, что в Оракле называлось ODBC драйвером - таковым было (не реализован был даже начальный вариант стандарта). С JDBC примерно тоже - худший из всех драйверов JDBC, который я видел - у Оракла. Начиная с кучи глюков и багов и заканчивая изрядным отходом от стандарта (типа метод по стандарту нужен - но не работает...). Впрочем, пока все java-решения от Оракла, которые я видел - ужасны. Надеюсь, что хоть покупка Сана им поможет, хотя и вряд ли, тут дело, похоже, в головах... :) Впрочем, я вполне понимаю коммерческий смысл такого подхода - наличие уникальных и неочевидных багов сильно привязывает к платформе и повышает цену специалистов. (Ох, а уж что я думаю про Оракловский синтаксический анализатор SQL - лучше не в слух. Хотя, вроде бы, в 10ке от самых идиотских багов избавились). А с точки зрения табуретки - все люди на одно лицо :) Давайте не путать поддержку стандартов Oracle-ом и ODBC-драйверами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 13:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyFavnНо раз в Оракле, как я понял из сказанного, нельзя физически отличить '' от строкового NULL, получается, что (" <> '') = false, и ('' <> NULL) = false. Более того, даже (NULL = NULL) = true в определенных случаях, а именно если NULL строковый и трактуется как '', по аналогии с ('' = '') = true. Тут вы ошиблись уже в первом своем выводе, так как в Oracle ('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL. В oracle костылики и на этот случай есть, например, DECODE работает как (NULL=NULL)=TRUE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 13:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
вообще интересно как в ANSI SQL было продавлено именно такой бредовый подход к нулам ? C# - на конкатинацию с нулом выдает пустую строку Java - на конкатинацию с нулом конкатинирует со строкой "null" php - на конкатинацию с нулом конкатинирует с пустой строкой т.е. все языки так или иначе выдают строку и только писающий против ветра ANSI SQL ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 13:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
2 Yo.! C# - на конкатинацию с нулом выдает пустую строку Правда что-ли? А мужики то и не знают Уж кто кто, а C# в этом отношении ведёт себя как говно, простите. Сложение числа с null'ом даёт null, а конкатенация строки с нуллом даёт исходную строку. т.е. все языки так или иначе выдают строку За все то языки не говори. Вон, VB (который не дотнетовский), "строка" + null даёт в результате null Там правда есть и другая конкатенация, у которой "строка" & null даёт в результате "строка" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛП Уж кто кто, а C# в этом отношении ведёт себя как говно, простите. Сложение числа с null'ом даёт null, а конкатенация строки с нуллом даёт исходную строку. да, чего-то я уйню спорол, конечно поведение точно такое же как у оракла ну так где же все таки костыль ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Вдогонку Yo.!C# - на конкатинацию с нулом выдает пустую строку Если бы C# вёл себя хотя бы так (выдавал или пустую строку, или как и положено null), то не приходилось бы вылавливать тараканов подобных таким: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛПконкатенация строки с нуллом даёт исходную строку. а как выглядит пример, демонстрирующий данное поведение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорЛПконкатенация строки с нуллом даёт исходную строку. а как выглядит пример, демонстрирующий данное поведение? MessageBox.Show("строка" + null); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛПЗайцев ФёдорЛПконкатенация строки с нуллом даёт исходную строку. а как выглядит пример, демонстрирующий данное поведение? MessageBox.Show("строка" + null); а это ничего, что в случае с целыми числами вы проверяете используется Nullable<>.ToString(), а со строками - нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев ФёдорЛПЗайцев ФёдорЛПконкатенация строки с нуллом даёт исходную строку. а как выглядит пример, демонстрирующий данное поведение? MessageBox.Show("строка" + null); а это ничего, что в случае с целыми числами вы проверяете используется Nullable<>.ToString(), а со строками - нет? Нет, ничего. Строка и сама по себе вполне Nullable, использовать нулябельную обёртку нет необходимости. А как оно вообще к делу относится? По-моему никак. Число (хоть нулябельное Nullable<Int32>, хоть ненулябельное Int32) плюс нулл даёт нулл Строка плюс нулл даёт строку. Что и было написано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:52 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛП Нет, ничего. Строка и сама по себе вполне Nullable, использовать нулябельную обёртку нет необходимости. А как оно вообще к делу относится? По-моему никак. Число (хоть нулябельное Nullable<Int32>, хоть ненулябельное Int32) плюс нулл даёт нулл Строка плюс нулл даёт строку. Что и было написано. не совсем понимаю, почему стандарт ANSI SQL должен быть применим к ссылочным типам. м.б. их и сравнивать нужно по тем же правилам и результатом ("строка" == null) должно быть null ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Зайцев Фёдорне совсем понимаю, почему стандарт ANSI SQL должен быть применим к ссылочным типам. Это к Yo вопрос. Он начал сравнивать ANSI SQL и другие языки программирования м.б. их и сравнивать нужно по тем же правилам и результатом ("строка" == null) должно быть null ? Кто мешает? В том же самом VB для определения, нулл чтото или не нулл - была конструкция IsNull(чтото) Сравнение же с нуллом давало нулл. Как и положено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:16 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!вообще интересно как в ANSI SQL было продавлено именно такой бредовый подход к нулам?Собрались умные люди и сделали единый логичный подход к любому неопределенному значению, вне зависимости от его типа. А Ораклу, как обычно, стандарты побоку, он выше этого. Ему свои баги дороже. Yo.!C# - на конкатинацию с нулом выдает пустую строку Java - на конкатинацию с нулом конкатинирует со строкой "null" php - на конкатинацию с нулом конкатинирует с пустой строкой т.е. все языки так или иначе выдают строку и только писающий против ветра ANSI SQL ...Yo.!да, чего-то я уйню спорол, конечно поведение точно такое же как у ораклаДа уж, всем уйням - уйня. Какая связь может быть между неназначенной ссылкой (пустым пойнтером) в процедурных ЯП и NULL значением в декларативном SQL? Это совершенно разные механизмы в принципиально разных языках. Или если буковки названия совпадают, и смысл должен быть тем же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:44 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxВ oracle костылики и на этот случай есть, например, DECODE работает как (NULL=NULL)=TRUEЯ писал про логические операции, а при использовании decode никаких логических операций. И уж в случае с decode такое использование null крайне удобно (и отрицательных сторон я не знаю). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyТут вы ошиблись уже в первом своем выводе, так как в Oracle ('' <> '' ) = NULL и соответственно все остальные логические операции с NULL тоже дают NULL.Отлично, тут что совой об пенек, что пеньком об сову... ('' = '') д.б. true, а ('' <> '' ) - false, так как это вполне определенные значения (пустые), вполне поддающиеся сравнению на тождественность. Никакой неопределенности, которая есть NULL, при этом не возникает. То есть, если я Вас правильно понял, '' принимается равной NULL, а строковый NULL равным '' не принимается? Да уж, железная логика... Кстати, раз '' принимается как NULL, в Оракле в столбец varchar() not null пустые строки заносить нельзя? Если так, это приведет к еще большей путанице при миграции. Полная жесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:54 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Favn Кстати, раз '' принимается как NULL, в Оракле в столбец varchar() not null пустые строки заносить нельзя? Если так, это приведет к еще большей путанице при миграции. Угу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и тут же побежал снимать not null атрибут со всех строковых полей. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey, Кстати, совсем забыл о конкатенации. Получается, что в операциях сравнения NULL ведет себя нормально, а '' - как NULL. При этом в конкатенации '' ведет себя как положено, а уже NULL - как ''. Понятно, что хранятся они одинаково, но синтаксически поведение того и другого не симметрично и зависит от контекста. Да уж, сию могучую логику аршином общим не измерить. В Оракул можно только верить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:07 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovУгу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и тут же побежал снимать not null атрибут со всех строковых полей.Угу, со всех. Включая ключевые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnПолучается, что в операциях сравнения NULL ведет себя нормально, а '' - как NULL. При этом в конкатенации '' ведет себя как положено, а уже NULL - как ''. Понятно, что хранятся они одинаково, но синтаксически поведение того и другого не симметрично и зависит от контекста.Вы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111". '' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey'' и null это одно и то же. Фигасе А в числовой столбец можно пустую строку записать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:23 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛПBogdanov Andrey'' и null это одно и то же. Фигасе А в числовой столбец можно пустую строку записать?Легко: Код: plaintext 1. 2. 3. Мне кажется, что понимание данного факта не так уж сложно вне зависимости от того соответствует это стандарту или нет, кажется кому-то правильным или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:26 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
кокой кошмар ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyВы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111". '' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.Боюсь, что чушь тут пишут, но не я. Согласен, NULL можно использовать как пустое значение, в качестве специфичного флажка, хотя я лично считаю это ошибкой проектирования. Но никто не спорит с тем, что у NULL есть и другое значение - неопределенность. И это значение - первично, именно как неопределенность в троичную реляционную логику NULL и вводили (это, как я уже писал, прямо следует из логических операций над ним). А вот '' как неопределенность трактовать ну никак нельзя, это именно пустое значение, что следует уже из операций над строками, например из конкатенации. Ну попробуйте к строке 'ABC' добавить неизвестную сейчас строку. Что логичнее получить - ту же 'ABC', или неизвестную строку, хоть и с 'ABC...' начинающуюся? Вы говорите, '' и NULL в Оракле тождественны. Получается, что во всех типах NULL может означать или неопределенность, или пустое значение. Кроме строкового. В строковом - именно неопределенность в операциях логических и именно пустое значение в операциях строковых. Т.е. трактовка и '', и NULL не определяется проектировщиком БД, а тупо зависит от контекста применения этих синтаксически разных, но почему-то одинаковых по смыслу в Оракле выражений. Причем в разных контекстах - разный смысл. Что, на мой взляд, предельно нелогично. ЗЫ. Возможно, Вы тут обсуждаете Оракл. А я тут пытаюсь говорить о смысле конструкции NULL в РСУБД вообще и ошбочном ее трактовании в Оракле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyНу неужели так трудно понять, что в Oracle нет "пустых строк", есть только null. Мне кажется, что понимание данного факта не так уж сложно вне зависимости от того соответствует это стандарту или нет, кажется кому-то правильным или нет.Ничего подобного. Факты говорят, что в синтаксисе SQL, в т.ч. Оракла, есть '' и есть NULL - две разные лексемы с синтаксически разными свойствами. Они же говорят, что в Оракле NULL и '' хранятся одинаково, откуда и пртиворечие. При этом эта единая сущность для строк ведет себя как NULL в логике и как '' в строковых операциях. Более того, получается, что в Оракле столбец с возможными пустыми строками даже не может входить в составной ключ, что уже совсем бардак и несовместимость с остальным миром РСУБД. И эти факты ну никак не могут быть правильной реализацией NULL и '', вне зависимости от того, нравится кому-то Оракл или нет. Лично мне он скорее нравится, но вот такие закидоны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnБоюсь, что чушь тут пишут, но не я. На надо обижаться. Вы, говоря именно об Oracle, пытались сравнивать поведение пустой строки и null, я вам объясняю, что это - бессмысленно, так как в Oracle это два названия одной и той же величины. FavnСогласен, NULL можно использовать То как использовать величину, обозначемую, как null сильно зависит от свойств этой величины. В Oracle и DB2 свойства величин, обозначаемых, как null - разные, а значит и использовать их можно по-разному. И ошибкой проектрования будет не учитывать свойства используемой величины. FavnПолучается, что во всех типах NULL может означать или неопределенность, или пустое значение.Ну это вообще что-то мне непонятное. null всегда обозначает величину, обладающую описанными в документации свойствами. Никаких неопределенностей или пустот он не обозначает. Все это просто некоторые наглядные объяснения, помогающие запомнить свойства величины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:56 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnBogdanov AndreyВы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111". '' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации.Боюсь, что чушь тут пишут, но не я. Согласен, NULL можно использовать как пустое значение, в качестве специфичного флажка, хотя я лично считаю это ошибкой проектирования. Но никто не спорит с тем, что у NULL есть и другое значение - неопределенность. И это значение - первично, именно как неопределенность в троичную реляционную логику NULL и вводили (это, как я уже писал, прямо следует из логических операций над ним). А вот '' как неопределенность трактовать ну никак нельзя, это именно пустое значение, что следует уже из операций над строками, например из конкатенации. Ну попробуйте к строке 'ABC' добавить неизвестную сейчас строку. Что логичнее получить - ту же 'ABC', или неизвестную строку, хоть и с 'ABC...' начинающуюся?Вы тут можете сколько угодно теоретизировать, но по сути NULL - это дополнительный бит информации. В оракле для строк его не ввели. Вероятно посчитав что пустая строка и так довольно красноречива. Вот и вся разница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 17:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnФакты говорят, что в синтаксисе SQL, в т.ч. Оракла, есть '' и есть NULL - две разные лексемы с синтаксически разными свойствами.Да, лексемы две, но свойства у них одинаковые. В чем противоречие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 17:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyВы пишете полную чушь (мы ведь Oracle Обсуждаем). Нельзя говорить, что '' ведет себя как NULL. Это все равно, что написать "ока ездит как ваз-1111". '' и null это одно и то же. И поведение этой величины в разных конструкциях четко описаго в документации. вот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 18:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Favn, а в процедурном sqlpl в db2, что получается в результате конкатинации с нулл ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 18:10 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmвот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно.Причем здесь вера? Если я считаю, что человек порет чушь, я так и пишу. Если отдельные граждане никак не могут уяснить себе тот простой факт, что в Oracle null и пустая строка это одно и то же, то мне приходится быть не слишком вежливым дабы объяснить им это. Заметьте, я ни в одном месте не написал того, что поведение Oracle в данном случае правильное, логичное и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 22:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andreyiscrafmвот она - непоколебимая вера. Главное описать в документации и произнести устами Тома, или ему подобных, и все... ее не сломать. О чем здесь говорят? О логике? Смешно.Причем здесь вера? Если я считаю, что человек порет чушь, я так и пишу. Если отдельные граждане никак не могут уяснить себе тот простой факт, что в Oracle null и пустая строка это одно и то же, то мне приходится быть не слишком вежливым дабы объяснить им это. Заметьте, я ни в одном месте не написал того, что поведение Oracle в данном случае правильное, логичное и т.п. Ну вы не правы, да ещё и нахамили Favn. Что вы нахамили, думаю, понятно. А не правы вы в том, что человек не ведёт дискусию так оно или не так в оракле. Он считает, что это нелогичное поведение для любого языка программирования. Возьмём любого программиста, не знакомомго с оракл, и попросим его ответить что выведет данный код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Совершенно очевидно, что это КОСТЫЛЬ. Совершенно очевидно, что НЕЛОГИЧНЫЙ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 23:44 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Ну и возьмём любимое нами веб-программирование (PHP): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 23:51 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 '') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2010, 00:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Модератор: этот пост я удаляю, надеюсь понятно почему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2010, 00:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Ок. Я хотел сказать, что если кто-то думает, что '' и NULL одно и тоже. То Том Кайт мягко ответил им, что они ошибаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2010, 00:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnDimitry SibiryakovУгу, нельзя. Но никакой путаницы нет. Один раз получил ошибку в лоб и тут же побежал снимать not null атрибут со всех строковых полей.Угу, со всех. Включая ключевые раз у них принято как постулат, что null и пустая строка в реальном мире идентичны, то это вполне логичное следствие. Оставляем столбцы как not null, а пользователя заставляем что-то писать в соответствующие столбцы (включая ключевые) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2010, 03:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
StalkerSраз у них принято как постулат, что null и пустая строка в реальном мире идентичны, то это вполне логичное следствие. Оставляем столбцы как not null, а пользователя заставляем что-то писать в соответствующие столбцы (включая ключевые) Возможно дело обстоит еще хуже (по крайней мере, если принимать Ваши постулаты): null и пустая строка существуют тока в компьютерном типа мире, а факты реального описываются знаками отличными от null и пустая строка. Вот, возможно, Надо же все варианты учитывать, а не тока первые пришедшие в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2010, 20:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Как прекрасно, что я открыл для себя этот форум. Что ж я делал раньше. Фанатичность некоторых участников, конечно, просто зашкаливает... впрочем в этом можно увидеть плюс и возможность увидеть мир с другой точки зрения. Хуже уже когда человек абсолютно невосприимчив к аргументам, но с такими общение можно ограничивать несколькими постами. Ну это так... лирика. Если честно пока прочитал только 5 страниц топика. По поводу null и пустых строк: Oracle: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Но черт возьми смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец! Не проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах. Чем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 13:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
О, смотрю на 13-й странице та же тема. Может уже было предложено, но SergSuperвот простой пример допустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет если привязана надо писать "выплата 100 руб согласно договору №100", если нет - просто "выплата 100 руб" если бы null не был бы пустой строкой, можно было бы просто написать Код: plaintext ну и сейчас, глядя на написанные тексты, я вижу много мест, которые можно было бы несколько упроститьну пишите так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 13:11 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopПо троичной логике, если неопределенность прибавляется к чему-то, то результат тоже неопределен. Ну это Вы в троичной логике прибавляете неопределенность к строкам или числам. Однако, это все еще не достаточно распространенная пракатика. Например, операция сложения задана на множестве чисел. И такого элемента как неопределенность в этом множестве нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 13:19 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopО, смотрю на 13-й странице та же тема. Может уже было предложено, но SergSuperвот простой пример допустим есть какая-то выплата, она может быть привязана к какому-то договору, может нет если привязана надо писать "выплата 100 руб согласно договору №100", если нет - просто "выплата 100 руб" если бы null не был бы пустой строкой, можно было бы просто написать Код: plaintext ну и сейчас, глядя на написанные тексты, я вижу много мест, которые можно было бы несколько упроститьну пишите так: Код: plaintext больше проблем нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 13:52 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperуважаемый, давайте-ка Вы будете повнимательней читать, и поменьше растопыривать пальцы. ок? больше проблем нетЯ даже не пытался растопыривать пальцы и не собирался никаким боком тебя оскорблять. Ну раз у ж ты позволяешь себе высказываться в таком духе, то я замечу, что я акцентировал внимание на том, что топик еще целиком не прочел. И ты в свою очередь читай внимательнее, любезный. PS Нельзя было просто написать "уже было"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 14:27 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopЯ даже не пытался растопыривать пальцы значит мне показалось dbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает... ...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!.. ...чем демонстрировать свою узколобость...можно и из других топиков надергать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 14:37 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
просто ЧСВ не правильно оценивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 14:41 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmпросто ЧСВ не правильно оценивается. неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 14:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperdbms_photoshopЯ даже не пытался растопыривать пальцы значит мне показалось dbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает... ...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!.. ...чем демонстрировать свою узколобость...можно и из других топиков надергатьОк, постараюсь изменить стиль. Я хотел сделать акцент на том, что мне одинаково успешно удается разрабатывать и на МС СКЛ и на оракле учитывая указанную особенность со строками. И я считаю её именно особенностью а не недостатком какой либо из этих двух СУБД. Если человеку эта особенность сильно мешает разрабатывать, то, я думаю, ему стоит искать проблему в себе а не в СУБД. И, скажите, пожалуйста, Вы много новых и свежих мыслей почерпнули со страниц 5-13? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!а в процедурном sqlpl в db2, что получается в результате конкатинации с нулл ?А что там может получиться? В DB2 SQL и SQL PL исполняются одним процессом, без внешних VM. Естественно, результат тот же. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:13 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperdbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает... ...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!.. ...чем демонстрировать свою узколобость...можно и из других топиков надергатьНадергайте. И с чем Вы не согласны с содержанием или стилем? Я каждый из приведенных тезисов могу обосновать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoНу это Вы в троичной логике прибавляете неопределенность к строкам или числам. Однако, это все еще не достаточно распространенная пракатика. Например, операция сложения задана на множестве чисел. И такого элемента как неопределенность в этом множестве нет. Естественно, неопределенности в самом множестве чисел нет. Иначе она не была бы неопределенностью, которая есть возможность любого значение из этого множества. А вот в арифметике неопределенность есть - это результат деления на 0, т.к. любое число * 0 = 0. Точно так же во множестве строк нет неопределенности. А вот пустая строка в нем есть, и это вполне определенное значение, к неопределенности с точки зрения здравого смысла никакого отношения не имеющая. Как и 0 (отсутствие значения) в арифметике. И любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен. PS. Ну что Вы, право :) Троичную логику вроде не я придумал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopSergSuperdbms_photoshopФанатичность некоторых участников, конечно, просто зашкаливает... ...смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец!.. ...чем демонстрировать свою узколобость...можно и из других топиков надергатьНадергайте. И с чем Вы не согласны с содержанием или стилем?здесь как бы принято возможности СУБД сравнивать, а не обсуждать мнения относительно участников дискуссии ну и кроме того мне лично такой стиль общения кажется хамским, но это только моё личное мнение dbms_photoshopЯ каждый из приведенных тезисов могу обосновать.это мало кому интересно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:34 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 ведет себя как ''? Люди, знакомые с Ораклом, поможите разобраться, дайте сцылочку! В этой "локике" лично я запутался окончательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnПонятно, что работает это только для varchar, не для char (уже бездна "логики"). Но правильно ли я понял, что '' на самом деле не есть null, а null просто записывается в поле varchar при присваивании ему ''? Ну, как тут написали, null записывается не только в поле типа varchar (при попытке записи ''), но так же и в поле типа int. А в поле типа char - нет, не записывается null Бездна логики (с) Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)? Если '' не эквивалентно null (несмотря на все здешние убеждения), то почему оно вообще позволяет записать себя в int? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:34 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnПонятно, что работает это только для varchar, не для charДаже для полей типа char - пустая строка означает null: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Исключением является именно присвание значения переменным типа char в PL/SQL коде. Зачем такое исключение сделано - не знаю. Более того в документации именно по PL/SQL об этом не сказано. Есть только общая фраза: Код: plaintext 1. ЛПЕсли '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?Именно, что пишется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnА что там может получиться? В DB2 SQL и SQL PL исполняются одним процессом, без внешних VM. Естественно, результат тот же. т.е. в дб2 процедуры на жава конкатенируют так, а sqlpl этак !? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:44 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 нет, а пустая ссылка. Что в этом такого удивительного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 17:25 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.!, Уточню. Для Java SP/UDF используется только один тип драйвера - type 2, работающий через DB2-ного клиента (в отличие от type 4, писаного на самой Java и в клиенте не нуждающегося). При запуске на сервере (локальном коннекте) такой клиент работает напрямую со структурами памяти инстанса DB2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 17:40 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyFavnПонятно, что работает это только для varchar, не для charДаже для полей типа char - пустая строка означает null: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Исключением является именно присвание значения переменным типа char в PL/SQL коде. Пардон, а если переменной типа char в PL/SQL коде присвоить значение null - что в этой переменной окажется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnЕстественно, конкатенация в SQL в JDBC и SQLJ выполняется по правилам SQL DB2. процедурный код сторед процедуры на SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе ... именно это и странно, если не сказать шизофреничненько. если конкатенация идет в процедурном коде процедуры на SQLJ работает так, если в участке декларативного SQL той же процедуры, то этак. а здесь мы рыбу заворачивали (tm) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛППардон, а если переменной типа 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:27 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
До кучи: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Favn Естественно, неопределенности в самом множестве чисел нет. Иначе она не была бы неопределенностью, которая есть возможность любого значение из этого множества. Все еще допускаю, что ее там нет тока от того, что "Иначе она была бы неопределенностью, которая есть возможность любого значение из этого множества", но и была бы чем угодно. Т.е. какую бы личину она не приняла, ее, скорей всего, там бы не было. Ну так уж сложилось, наверное, типа исторически. Ну, возможно, пользы от ея добавления не нашли. Favn А вот в арифметике неопределенность есть - это результат деления на 0, т.к. любое число * 0 = 0. А может т.к. если бы на Луне жили люди, то на нас падали бы объедки, а этого не происходит? Ить от того что любое число * 0 = 0 не следует, что на от деления на 0 должен быть результат, да еще и который есть неопределенность. Обычно, там по неопределенностью понимается отсутсвие результата при делении: деление на 0 неопределено. В любом случае та неопределенность, "которая есть возможность любого значение из этого множества" похожа на перемнную, на которую таки можно делить, если она не равна 0. Вы знаете, что индоевропейские языки многозначны? Вы, скорее всего, используете термин "неопределенность" в разных смыслах в разных местах текста. От того так и получается: то оно похоже на переменную (известное значение), то она есть в арфметике результат деления на 0 (известно что не значение). Кста, в ТФКП есть расширение допускающее деление на 0, оно обозначается символом бесконечность. Им нуно было назвать ее неопределенность? Тада бы Вы тут не про арифметику, а про ТФКП бы могли рассуждать. Favn Точно так же во множестве строк нет неопределенности. А вот пустая строка в нем есть, и это вполне определенное значение, к неопределенности с точки зрения здравого смысла никакого отношения не имеющая. Ну как же "точно так"? Ить там неопределенность в арифметике в конце концов Вы все таки нашли. А здесь ее нет. Это совсем не точно так же у Вас получилось. Favn Как и 0 (отсутствие значения) в арифметике. Зачем же 0 непременно отсутсвие значения, а не значение? Если под отсутсвием значение понимать, что нет даже нуля, то этого в арифметике нет, а 0 там есть. Значит они разные? Favn И любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен. Вы сначало расширте множество неопределенностью, потом определите опреации, чтобы все это было видно, а потом доказывайте это утверждение. А пока я думаю ясности нет. Есть то как поддерживают МД в этой части СУБД? и соотвественно возможность это учитывать при пректировании. ПС В тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyНа мой взгляд, выглядит так, что указанное отличие для CHAR - ошибка, исправлять которую ни у кого нет желания :)А на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoВ тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.Это утверждение было в предыдущих постах. Пожалуйста, повторю точнее: NULL в SQL введен как обозначение неопределенного в данный момент значения. Это следует из получения NULL как результата любой логической операции с операндом NULL в любой РСУБД. И аналогично NULL является результатом вообще любой операции с операндом NULL в вообще любой РСУБД (кроме, конечно, проверок на NULL). Единственное исключение - это именно строковые типы именно в Оракле. Что со стороны Оракла кажется мне нелогичным и ошибочным. vadiminfoВсе еще допускаю, что ее там нет тока от того, что "Иначе она была бы неопределенностью, которая есть возможность любого значение из этого множества", но и была бы чем угодно. Т.е. какую бы личину она не приняла, ее, скорей всего, там бы не было.Именно это я и утверждал. vadiminfoВ любом случае та неопределенность, "которая есть возможность любого значение из этого множества" похожа на переменную, на которую таки можно делить, если она не равна 0. Вы знаете, что индоевропейские языки многозначны?..Рассуждения о философском смысле числа 0 и индоевропейских языках предлагаю отставить в сторону. Возможно, я увлекся. Но и не только я. ;) В любом случае - понятия NULL в смысле "значение не определено" нет в явном виде ни в арифметике, ни в операциях над строками в программировании на большинстве универсальных языков. Это понятие есть в SQL с его процедурными расширениями. А вот "пустая строка" есть практически везде, и отнюдь не в смысле "значение не определено", а в смысле "строка, не содержащая символов, т.е. пустая". Кроме Оракла, конечно. Т.е. тут ('' в смысле "значение не определено") Оракл выбивается не только из ряда РСУБД, но и из ряда практически всех остальных систем программирования, что выглядит по меньшей мере странно. vadiminfoFavnИ любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен.Вы сначало расширте множество неопределенностью, потом определите опреации, чтобы все это было видно, а потом доказывайте это утверждение.При чем тут теория множеств? Мы рассматриваем NULL в контексте РСУБД. Для них не надо расширять множества и определять операции - все давно определено стандартом, а вовсе не мной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 19:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 совершенно по другому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 19:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 в Оракле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 19:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnА на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)Ошибкой является несоответствие документации, а не логике отдельных людей. В данном случае я вижу, что поведение пустой строки для присваивания переменной char документации не очень соответствует, а значит это - ошибка. Понятно, что работа Oracle с null не согласуется со стандартом SQL. Честно говоря, мне на стандарт плевать. Проблемы возникнут при разработке кроссплатформенных решений, которыми я постараюсь никогда не заниматься совсем по другим причинам. Точно также меня не задевает и работа с null в других СУБД, хотя лишнее nvl писать иногда надоедает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 21:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 процедуре?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 21:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfonull и пустая строка существуют тока в компьютерном типа мире, а факты реального описываются знаками отличными от null и пустая строка. Вот, возможно, Надо же все варианты учитывать, а не тока первые пришедшие в голову. Вадим, еще раз сорри за занудство, но в реальном мире факты НЕ_ВСЕГДА описываются теми знаками, которые укладывались бы в типа Вашу теорию. Вариантов значения строк, отличных от null и пустой строки, первых пришедших в мне голову, у меня очень много. :) Коли Вы, как разработчик, не смогли наложить на значения этих переменных разумные ограничения, то все они - ФАКТЫ! В компьютерном мире РМД, наверное и в Вашем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:19 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛПНу, как тут написали, null записывается не только в поле типа varchar (при попытке записи ''), но так же и в поле типа int. А в поле типа char - нет, не записывается null Бездна логики (с) Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)? Если '' не эквивалентно null (несмотря на все здешние убеждения), то почему оно вообще позволяет записать себя в int?Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена". Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
О боги! Откуда вы это всё придумали??? Из MMX-инструкций, устройства FPU? Какое ещё множество какой такой неопределённостью расширить? NULL - это просто флаг(!), который говорит, что значения нет. Как я уже сказал, фактически это отдельное(!) свойство, а не отдельное значение. Это, если хотите, атавизм синтаксиса современного SQL, потому что синтаксически присваивается по значению как обычное значение, хотя реально является отдельным самостоятельным свойством, например: !Apple.isNull() ? Apple.GetColor() : RaiseException(). По правильному любые операции с NULL должны приводить к исключению. Если ваша программа дошла до умножения или сложения чего-то с тем, чего не существует - это ошибка при реализации бизнес-логики, это как в сях записать что-то в память по неинициализированному указателю, просто ошибка. Не надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Всё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:35 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopНо черт возьми смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец! Не проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах. На мой взгляд - не проще. А точнее, вообще трудновыполнимо. dbms_photoshopЧем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски. Нет ничего идиотского, налицо отступление от стандартов, которое, возможно, чревато (а возможно и оправданно)... В любимой СУБД может не быть FROM... тоже обсуждаемо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 22:44 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxО боги! Откуда вы это всё придумали??? [..] 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Но есть вопросы - он флаг в дополнение к значению или вместо? Т.е. ''(varchar) и флаг null? или вместо ''(varchar) - null? А когда в поле "адрес" у бомжа - '', это <значения нет - для примитивов> или <объект не инициализирован - для объектов>?.. web_foxВсё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк. Да не, тут больше интересуют вопросы интерпретиции null. Вот если вынести "адреса граждан" в отдельное отношение, то совершенно справедливо можно наложить ограничение not null and != '' в поле "адрес", т.е. либо у человека адрес имеется и будь добр его заведи, либо адреса нет, тогда и записи не будет, и соединение (композиция) даст null в адресе. Это, говоря Вашими словами, прозрачно и понятно. А без этого - флаги "чего-то", что они значат - надо еще разбираться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 23:28 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxНе надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно.Эх, где же вы были, когда стандарты пИсали... Булгаков. Собачье сердце---~Да не согласен я. ---~С кем? С энгельсом или с каутским? ---~С обоими,~--- ответил Шариков. ---~Это замечательно, клянусь богом. ``Всех, кто скажет, что другая...'' А что бы вы со своей стороны могли предложить? ---~Да что тут предлагать?.. А то пишут, пишут... Конгресс, немцы какие-то... Голова пухнет. Взять все, да и поделить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 23:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
2 Sgt.Pepper Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена". Конечно. А что в этом плохого? Как прозвучало "как же логично Он устроен", так с тех пор спокойно и мусолим бездну логики :) Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты. Нравится Пушкин - ваше право. Можете даже других агитировать. Но аргументы тщательнЕе надо подбирать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 23:40 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoЗачем же 0 непременно отсутсвие значения, а не значение? Если под отсутсвием значение понимать, что нет даже нуля, то этого в арифметике нет, а 0 там есть. Значит они разные?Безусловно. Еще вот какое соображение. Пользовательские интерфейсы обычно при редактировании строки (без выбора из списка) легко дают возможность юзеру изменить null на '', но не наоборот, т.е. с известной долей погрешности можно рассматривать null в адресе гражданина как "неинициализированное, неизвестное значение", а '' как "осмысленное пустое (отсутствующее при декомпозиции)". Что скажете - эта информация в каких-либо случаях заслуживает того, чтобы не быть потерянной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 23:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ЛПНравится Пушкин - ваше право. Можете даже других агитировать. Но аргументы тщательнЕе надо подбирать :) Над этим мне еще много работать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 23:56 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
vadiminfoУточните плиз эти аксиомы, что из них стоящего вывели, чтобы оценить пользу, ну и применть. Я пока не в курсах и считаю NULL вынужденным злом, потому что неопределенности мне не нужны в БД, ввиду их возможности озадачить потребителя информации, и даже сбить с толку в некоторых случаях. Внешний джойн всегда в общем случае, порождает null'ы, в этих неопределенностях есть много определенно логичного и совершенно однозначно интерпретируемого, в нем столько же зла, сколько и в пустом множестве (коим можно обозвать пустую строку), и в 38.8 по цельсию на градуснике, и в кляксе на библии. Можно ли конкатенцию символов "Ё" и "б" считать ЗЛОМ, или классификатором документа, в котором она встречается, и исходной информацией для применения соответствующих алгоритмов? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 01:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PepperВнешний джойн всегда в общем случае, порождает null'ы, в этих неопределенностях Кхе... Нуллы, порождаемые внешним джойном, слегка так отличаются от нуллов, содержащихся в таблицах. В одном случае это отсутствие значения, в другом - значение неопределённое. Квадратнолобые дядьки, теоретики бэдэ, очень громко писают кипятком, когда кто-то начинает путать "наличие отсутствия" и "отсутствие присутствия". Однако ж все продолжают путать. Чего уж тут ожидать от бедных школьников, заблудившихся среди бэдэшных нуллов и неинициализированных объектных ссылок в каком-то языке программирования. Это так, к слову пришлось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 04:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxПо правильному любые операции с NULL должны приводить к исключению. Я верно понял вашу мысль о том, что все СУБД работают совершенно неправильно? Или вы можете назвать СУБД, которая при конкатенации с null выдает исключение? А если все СУБД работают неправильно, то вопрос лишь в том, какая из "неправильностей" удобнее, привычнее и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 08:48 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 в контексте РСУБД. Для них не надо расширять множества и определять операции - все давно определено стандартом, а вовсе не мной. Вот и я гАвАрУ. Потому все еще скептически отношусь к попыткам строго вывести про то, что должна операция и про арифметику и проч. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 09:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Sgt.PeppervadiminfoУточните плиз эти аксиомы, что из них стоящего вывели, чтобы оценить пользу, ну и применть. Я пока не в курсах и считаю NULL вынужденным злом, потому что неопределенности мне не нужны в БД, ввиду их возможности озадачить потребителя информации, и даже сбить с толку в некоторых случаях. Внешний джойн всегда в общем случае, порождает null'ы, в этих неопределенностях есть много определенно логичного и совершенно однозначно интерпретируемого, в нем столько же зла, сколько и в пустом множестве (коим можно обозвать пустую строку), и в 38.8 по цельсию на градуснике, и в кляксе на библии. Можно ли конкатенцию символов "Ё" и "б" считать ЗЛОМ, или классификатором документа, в котором она встречается, и исходной информацией для применения соответствующих алгоритмов? :) Ну про что там за аксиомы не понял. Что до NULL в джойнах и зла, так в этих внешних джойнах разве нет, как правило, еще отделения зла, либо выяснения на скока много "зла"? Часто для внешние сединения приходится писать, чтобы зло не прокаралось. Да и как же это интерпретируется? Более часто как свойство отсутсвует или чаще как не известно. И аксимы какие тут применишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 10:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 у меня есть сомнения на этот счет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 12:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 значений отсутствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 12:43 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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Вот и я гАвАрУ. Потому все еще скептически отношусь к попыткам строго вывести про то, что должна операция и про арифметику и проч.Хорошо. Давайте просто про несоответствие Оракла стандарту в данном случае :) Что совой об пенек, что пеньком об сову... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 14:41 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 Хорошо. Давайте просто про несоответствие Оракла стандарту в данном случае :) Что совой об пенек, что пеньком об сову Ну знает это другой вопрос. Стандарты все равно полностью не все соблюдают, да и стандарты не обязательны и могут меняться. Это процесс. Другая тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 16:14 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. А как вы там лично интерпретируете ОТСУТСТВИЕ ЗНАЧЕНИЯ, - как "неизвестное" значение, "непонтяное", "неприятное", "плохое", "противное" и т.п. - это на ваш вкус ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 20:01 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andreyweb_foxПо правильному любые операции с NULL должны приводить к исключению. Я верно понял вашу мысль о том, что все СУБД работают совершенно неправильно? Или вы можете назвать СУБД, которая при конкатенации с null выдает исключение? А если все СУБД работают неправильно, то вопрос лишь в том, какая из "неправильностей" удобнее, привычнее и т.п. Вы - директор. Новый груз пришёл, но помещения НЕТ. Вам какая больше нравится ситуация: 1. Кладовщик, посмотрел, что склада нет. Ничего страшного, написал в "принято товара": "неизвестно". И пошёл себе дальше работать как ничего не случилось. Вам надо проверять, на написал ли этот XXX в накладных "неизвестно", чтобы вставить ему. 2. Кладовщик, посмотрел, что склада нет. Пришёл к вам и говорит: "Босс, исключительная ситуация, - товар пришёл, а помещения нет". Мне нравится второй вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 21:02 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_fox1. Кладовщик, посмотрел, что склада нет. Ничего страшного, написал в "принято товара": "неизвестно". Хуже другое: он взял регистр товаров на складе, и в графу "розовых слоников детских" написал 28 + неизвестно = неизвестно. Забыл число "28" и пошёл дальше работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 21:13 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerweb_fox1. Кладовщик, посмотрел, что склада нет. Ничего страшного, написал в "принято товара": "неизвестно". Хуже другое: он взял регистр товаров на складе, и в графу "розовых слоников детских" написал 28 + неизвестно = неизвестно. Забыл число "28" и пошёл дальше работать. В яблочко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 22:00 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 завязываю. возвращаясь к нашим нулам: для меня выглядит дико когда говорят, что когда я обрабатываю нулл языком сторед процедур, то это один нулл, а когда я обрабатываю ту же сущность из той же таблицы, из того же поля но уже на уровне апп-сервера это уже какой-то другой нулл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 22:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Вообще, само наличие правил работы с NULL является типичным примером old school-стиля программирования, когда все функции возвращали коды, типа 0 - всё хорошо, 1 - нет прав, 2 - неверно задано имя файла и т.д. Типа операция выполнится по-любому, а ты (если будешь любезен) должен получить код возврата и... обработать его. Хотя, можно не обрабатывать! Не обрабатываешь коды возврата - ничего страшного, программа будет работать дальше, а там как повезёт. Шли годы. Умные люди поняли, что такой подход позволяет писать тот самый "говнокод", чем люди удивительно часто пользуются. Подход с исключениями не позволяет писать говнокод, сразу же обрывает выполнение программы и говорит: "товарищ, ты написал Говнокод", ибо ложить шифер на непостроенный гараж есть "говнокод". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2010, 22:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerКогда я учил людей Oracle, я всегда говорил им одну фразу: "Запомните одно-единственное слово, dba_views...Хм... Можно было учить получше :-) - DICTIONARY или его синоним DICT softwarerВообще-то Oracle изначально был написан на ассемблере.Да, самая первая коммерческая версия. Но начиная с незапамятных времен и версии 3 - на C (компилятор C был баксов на 100 дешевле компилятора Pascal) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2010, 20:05 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
так, к слову...Хм... Можно было учить получше :-) - DICTIONARY или его синоним DICT Наверняка можно было лучше, и не только в этом. так, к слову...Но начиная с незапамятных времен и версии 3 - на C Вполне вероятно, что в целях совместимости уже не захотели менять формат. Также вполне возможно, что осознанно решили использовать более прогрессивный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2010, 20:39 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Yo.! то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver Это, хм, к вопросу о поддержке Ораклом стандартов ) JDBC driver type {1-5} - это часть стандарта Java. IBM честно указывает, какому стандарту соответствует предоставляемый драйвер. Oracle, как всегда, стандарты игнорирует... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 04:33 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
DPH3Yo.! то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver Это, хм, к вопросу о поддержке Ораклом стандартов ) JDBC driver type {1-5} - это часть стандарта Java. IBM честно указывает, какому стандарту соответствует предоставляемый драйвер. Oracle, как всегда, стандарты игнорирует... А мужики то не знают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 10:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Alexander RyndinDPH3Yo.! то что IBM называет JDBC type 2 driver оракл завет JDBC Server-Side Internal Driver Это, хм, к вопросу о поддержке Ораклом стандартов ) JDBC driver type {1-5} - это часть стандарта Java. IBM честно указывает, какому стандарту соответствует предоставляемый драйвер. Oracle, как всегда, стандарты игнорирует... А мужики то не знают. Типа шутка? Чуть выше о том и говорят, что стандартная вещь названа по своему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 10:56 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmAlexander RyndinDPH3 Oracle, как всегда, стандарты игнорирует... А мужики то не знают. Типа шутка? Чуть выше о том и говорят, что стандартная вещь названа по своему.эм... придумывать свои названия и игнорировать стандарты - это 2 разные вещи. кроме того, по ссылке можно видеть, что у Oracle есть 2 драйвера четвертого типа (JDBC Thin client-side driver и JDBC Thin server-side driver). как их называть? мне кажется, что все логично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2010, 13:10 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
так, к слову... softwarerВообще-то Oracle изначально был написан на ассемблере.Да, самая первая коммерческая версия. Но начиная с незапамятных времен и версии 3 - на C (компилятор C был баксов на 100 дешевле компилятора Pascal) не потому что дешевле, а потому что портировать паскалевский Ораkл на 28 ОС не удалось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 00:18 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Lepsikпотому что портировать паскалевский Ораkл на 28 ОС не удалось бы. Столь же сомнительное утверждение, как и предыдущее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 00:42 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 18:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
web_foxЯ внимательно прочитал что вы написали и вот что пишется в документации "самой лучшей субд"... Это просто флажёк такой "нет значения". Всё просто до безобразия. Поэтому не нервничайте.Да мне, собственно, нервничать ни к чему. Тем более из-за цитаты из документации продукта, который я пока не использую и багу в котором обсуждаю :) web_foxВообще, само наличие правил работы с NULL является типичным примером old school-стиля программирования, когда все функции возвращали коды, типа 0 - всё хорошо, 1 - нет прав, 2 - неверно задано имя файла и т.д. Типа операция выполнится по-любому, а ты (если будешь любезен) должен получить код возврата и... обработать его. Хотя, можно не обрабатывать! Не обрабатываешь коды возврата - ничего страшного, программа будет работать дальше, а там как повезёт.Опять за свое. Какие "коды возврата" в декларативном, непроцедурном языке SQL? Какой-такой new scool в SQL, использующий исключения? Куда, по-вашему, должно выводить исключение в запросе? В каком месте запроса обрабатываться? Где там стек вызовов? web_foxШли годы. Умные люди поняли, что такой подход позволяет писать тот самый "говнокод", чем люди удивительно часто пользуются. Подход с исключениями не позволяет писать говнокод, сразу же обрывает выполнение программы и говорит: "товарищ, ты написал Говнокод", ибо ложить шифер на непостроенный гараж есть "говнокод".В контексте обсуждения - бред полный. За долгие годы работы с C++, например, я худо-бедно разобрался с тем, что такое "исключения". Может, "умные люди" подскажут, в каком месте именно SQL я должен их использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 18:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnЯ считаю, что строковый NULL в Оракле ведет себя как "пустая строка" в строковых операциях и как общепринятый NULL в остальных, Не совсем так, к сожалению. Favn1. Внутренне противоречиво. Это значит, что Вы можете назвать "внутреннее противоречие" - то есть некое противоречие во внутренних, сугубо оракловых концепциях. Что-то я не совсем в этом уверен :) Хотя сам одно место, пожалуй, назову. Favn2. Противоречит поведению базового типа varchar во всех остальных РСУБД. Безусловно. FavnТ.е. является архитектурной "багой", Из (2) это никак не следует и следовать не может. Из (1) будет следовать не раньше, чем будет обосновано (1). Да и тогда.... есть в оракле одна чертовски забавная бага, проистекающая из самой сути реализации версионного механизма. Но было бы глупо из-за одной исчезающе редкой проблемы отказываться от всей версионности. FavnПричем "фича" эта deprecated самим Ораклом. Чушь. Favn ... изначальным ... неправомерно. Такое ощущение, что Вы обсуждаете юридический вопрос. В инженерной работе такая постановка вопроса просто нелепа. Скажем, у меня был проект, где было удобно принять, что N/0=null. И я определил операцию деления именно таким образом. И это значительно упростило всем работу и уменьшило количество ошибок. И честное слово, забавно было бы понаблюдать, как какой-нибудь "тру математик" кричал бы, что это неправомерно, на ноль делить нельзя и мы обязаны немедленно взвалить на себя тройной геморрой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 18:40 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 переменными . Меньше путаницы будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 20:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
FavnХотелось бы поглядеть на какую-либо инфу по варианту 2. Я в свое время искал на тему SQLJ по доке Оракла, но ничего похожего не видел. начать можно отсюда http://download.oracle.com/docs/cd/E11882_01/java.112/e10590/inserver.htm дальше о реализации sqlj мне не интересно. не моя тема. Yo.!И что делать, если это действительно разные нуллы в разных языках? с чего бы им быть разными если описывают они одно понятие (то что лежит в бд) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2010, 23:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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. Вот какда речь идет о стандартах, то здесь изначальное может играть роль. И я про стандарты уклоняюсь в связи такого рода моментами. Я одобряю Ваши усилия по приведение к стандартам, но поскоку у меня много сомнений, остаюсь в стане болельщиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2010, 11:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Хммм... Оказывается, Оракул позволяет в базу загрузить не только инвалидные метаданные, но и данные тоже: http://www.sql.ru/forum/actualthread.aspx?tid=776900 А что, вполне логично... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 13:50 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Хммм... Оказывается, Оракул позволяет в базу загрузить не только инвалидные метаданные, но и данные тоже: http://www.sql.ru/forum/actualthread.aspx?tid=776900 А что, вполне логично... Есть предложения какие констрейнты вешать на кривые ручки вальнувшие текст в другой кодировке в виде RAW в CLOB??? Внимаем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 13:54 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Есть предложения какие констрейнты вешать на кривые ручки вальнувшие текст в другой кодировке в виде RAW в CLOB??? Не, если индусы не сделали валидацию UTF8, то это не лечится. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 13:57 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Gluk (Kazan) Есть предложения какие констрейнты вешать на кривые ручки вальнувшие текст в другой кодировке в виде RAW в CLOB??? Не, если индусы не сделали валидацию UTF8, то это не лечится. Лили RAW, наплевав на любую валидацию База сказала "Хазяина UTF8", как бы повел себя FB??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 13:59 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)База сказала "Хазяина UTF8", как бы повел себя FB??? Сказала бы "пшолнах, malformed string". Нефиг выдавать win1251 за utf8. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 14:06 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Gluk (Kazan)База сказала "Хазяина UTF8", как бы повел себя FB??? Сказала бы "пшолнах, malformed string". Нефиг выдавать win1251 за utf8. а как он отличает win1251 от utf8? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 14:24 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperа как он отличает win1251 от utf8? Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному клиентскому character set (то, что в оракловском NLS_LANG идёт после точки). В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а подсунута в win1251, то скорее всего валидацию она не пройдёт. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 14:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SergSuperа как он отличает win1251 от utf8? Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному клиентскому character set (то, что в оракловском NLS_LANG идёт после точки). В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а подсунута в win1251, то скорее всего валидацию она не пройдёт. AI detected Нетушки, когда льем RAW пусть уж лучше разрешает лить всякий бред, чем отшибает руки на основании того, что данные не понравились его AI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 14:38 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SergSuperа как он отличает win1251 от utf8? Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному клиентскому character set (то, что в оракловском NLS_LANG идёт после точки). В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а подсунута в win1251, то скорее всего валидацию она не пройдёт. да ну нафиг а если я чего-то решил на каком-то своём новом языке написать? т.е. можно спорить нужно это или нет, но как-то на Оракул позволяет в базу загрузить инвалидные данные не тянет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 15:27 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuper как-то на Оракул позволяет в базу загрузить инвалидные данные не тянет А какая именно часть этого утверждения "не тянет"? "Оракул"? Так Оракул. "Позволяет"? Так позволяет ведь! "Загрузить"? Именно загрузить. "Инвалидные"? А как ещё назвать данные в кодировке, не соответствующей кодировке базы, которые потом (при выборке) не могут быть правильно отображены?.. "Данные"? Дык вроде бы данные... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 15:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SergSuper как-то на Оракул позволяет в базу загрузить инвалидные данные не тянет А какая именно часть этого утверждения "не тянет"? "Оракул"? Так Оракул. "Позволяет"? Так позволяет ведь! "Загрузить"? Именно загрузить. "Инвалидные"? А как ещё назвать данные в кодировке, не соответствующей кодировке базы, которые потом (при выборке) не могут быть правильно отображены?.. "Данные"? Дык вроде бы данные... кодировка - это же типа информация как надо отображать данные, а мало ли что клиент не может отобразить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 16:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 16:30 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?да я уже понял, что кто с FB не работает, тот ничего в жизни не понимает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 17:09 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperhvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?да я уже понял, что кто с FB не работает, тот ничего в жизни не понимает"информация как надо отображать данные" находится в файле со шрифтом, например. Кодировка символов не имеет к этому отношения. При чём тут FB ? Он конечно развивает способности, заставляя думать, но в данном случае и FB не поможет, увы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 17:15 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ? To be Nullor not to be Null в строках уже обсудили. Теперь новый виток - что такое символ, первична ли кодировка или значение =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 17:16 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SiemarglТеперь новый виток - что такое символ, первична ли кодировка или значение =)Я промолчал на SergSuperда ну нафиг а если я чего-то решил на каком-то своём новом языке написать?но на второй ляп уже не сдержался :) Ну а насчёт витков - пинайте недовольного Ораклом DS'а :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 17:22 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladSergSuperhvladSergSuperкодировка - это же типа информация как надо отображать данныеВот зачем говорить о том, в чём ничего не понимаешь ?да я уже понял, что кто с FB не работает, тот ничего в жизни не понимает"информация как надо отображать данные" находится в файле со шрифтом, например. Кодировка символов не имеет к этому отношения. и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 19:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperhvlad"информация как надо отображать данные" находится в файле со шрифтом, например. Кодировка символов не имеет к этому отношения. и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтомМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 22:36 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ? в файле со шрифтом и так есть информация о том как рисовать символы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 23:06 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
hvladSergSuperhvlad"информация как надо отображать данные" находится в файле со шрифтом, например. Кодировка символов не имеет к этому отношения. и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтомМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ?то есть содержит информацию, какой файл нужно выбрать и соответственно как отобразить данные, не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2010, 23:34 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
SergSuperhvladSergSuperhvlad"информация как надо отображать данные" находится в файле со шрифтом, например. Кодировка символов не имеет к этому отношения. и зачем же тогда в ХТМЛе это страницы написано <META content="text/html; charset=windows-1251">? вся ж информация как отображать есть в файле со шрифтомМожет для того, чтобы выбрать файл со шрифтом, в котором таки есть информация о том, как рисовать символы ?то есть содержит информацию, какой файл нужно выбрать и соответственно как отобразить данные, не так ли?Не так. После того, как было дано достаточное кол-во намёков, я даже не буду спрашивать - а что имеется в виду под словом отображать и при чём тут СУБД. Мне этот цирк быстро надоедает, уж извините. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2010, 00:12 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SergSuperа как он отличает win1251 от utf8? Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному клиентскому character set (то, что в оракловском NLS_LANG идёт после точки). В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а подсунута в win1251, то скорее всего валидацию она не пройдёт. У вас весь софт вот на таких измышлизмах построен? Продолжайте в том же духе, в это время ваши конкуренты добавят действительно полезную функциональность, например нормальную репликацию через захват изменений, а не то, что вы этим сейчас называете. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2010, 10:03 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ApexDimitry Sibiryakov SergSuperа как он отличает win1251 от utf8? Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному клиентскому character set (то, что в оракловском NLS_LANG идёт после точки). В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а подсунута в win1251, то скорее всего валидацию она не пройдёт. У вас весь софт вот на таких измышлизмах построен? Продолжайте в том же духе, в это время ваши конкуренты добавят действительно полезную функциональность, например нормальную репликацию через захват изменений, а не то, что вы этим сейчас называете. Удачи. это о чем? кто такие конкуренты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2010, 10:08 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmэто о чем? кто такие конкуренты? Да, мне тоже это интересно. Как и то, что это за "репликация через захват изменений, а не через то что сейчас". Так и возникает в воображении картина маслом по хлебу: сидят где-то изменения, а тут врываются амбалы в масках и всех их захватывают. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2010, 11:17 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
iscrafmApexDimitry Sibiryakov SergSuperа как он отличает win1251 от utf8? Она и не различает, просто проверяет входные текстовые данные на соответствие заявленному клиентскому character set (то, что в оракловском NLS_LANG идёт после точки). В utf8 разрешены отнюдь не любые сочетания байт, поэтому если заявлена строка в utf8, а подсунута в win1251, то скорее всего валидацию она не пройдёт. У вас весь софт вот на таких измышлизмах построен? Продолжайте в том же духе, в это время ваши конкуренты добавят действительно полезную функциональность, например нормальную репликацию через захват изменений, а не то, что вы этим сейчас называете. Удачи. это о чем? кто такие конкуренты? может имелись в виду майскули-постгресы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2010, 15:34 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
ApexУ вас весь софт вот на таких измышлизмах построен? Открою Вам страшную тайну, у них софт даже аналог ораклового substr (1, :n) выполнить не в состоянии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2010, 18:04 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerу них софт даже аналог ораклового substr (1, :n) выполнить не в состоянии. Да, Оракл всяко впереди планеты всей в умении извлечь подстроку из целого числа... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2010, 18:20 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа, Оракл всяко впереди планеты всей в умении извлечь подстроку из целого числа... Это иногда полезно. Меня куда более огорчила невозможность в FB без пользовательской функции извлечь подстроку из строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2010, 18:31 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer Меня куда более огорчила невозможность в FB без пользовательской функции извлечь подстроку из строки. Использование встроенной SUBSTRING запрещено религией? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2010, 18:45 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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, тот работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 10:38 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerМоя религия запрещает мне использовать неработающие решения. А снизойти до прямого указания убогому серверу нужного типа не позволяет гордость: Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 11:16 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА снизойти до прямого указания убогому серверу нужного типа не позволяет гордость: Скорее, целесообразность. Чем набивать код такими жуткими конструкциями, попутно пытаясь объяснить, почему тривиальная функция должна так выглядеть, разумнее таки вызывать работающую тривиальную функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 11:32 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov softwarerМоя религия запрещает мне использовать неработающие решения. А снизойти до прямого указания убогому серверу нужного типа не позволяет гордость: Код: plaintext блинннн лаконично то как :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 11:34 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)блинннн лаконично то как :) Ну, если учесть что во "впередиидущем" тип данных для placeholder вообще никак не определяется... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 13:27 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
чем больше я живу, тем больше убеждаюсь в том, что неявное приведение типов - зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 13:53 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
lockyчем больше я живу, тем больше убеждаюсь в том, что неявное приведение типов - зло. Зло, конечно. Правда, не очень понимаю, какое отношение эта истина имеет к конкретному случаю, где работает совсем другое зло - "дурацкие интерпретаторные синтаксические конструкции с идиотскими ограничениями на месте обычных функций". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2010, 14:46 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarerПравда, не очень понимаю, какое отношение эта истина имеет к конкретному случаю, где работает совсем другое зло - "дурацкие интерпретаторные синтаксические конструкции с идиотскими ограничениями на месте обычных функций".В данном случае вы ткнули пальцем не просто мимо, а вообще не в ту сторону. Причина этой конкретной ошибки в том, что Firebird выделяет ресурсы (в том числе память под значения параметров) на этапе препарирования запроса (читай - компиляции). Есс-но, для параметра неизвестного типа это сделать не возможно. Т.е. теория про "интерпретаторные синтаксические конструкции" абсолютно не верна. Почему эта ошибка возникает именно в этом месте (аргументы встроенной ф-ции имеют известные типы) - это стоит посмотреть. Но я даже не буду предлагать вам внести это в трекер. Вы же выше этого Ибо не удосужились поискать ответ на этот элементарный вопрос, известный практически всем, кто работает с IB\FB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 00:22 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
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 до того, как писать на форум, но решил из профилактических соображений сделать то, что раз за разом делает Дмитрий и посмотреть, как вы отреагируете, а заодно зафиксировать на будущее багу в тривиальной корневой функциональности, дабы вспоминать её каждый раз, когда Дмитрий сумеет нагуглить очередную оракловую мелочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 02:29 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer, оставляю Вам общение с Сибиряковым, очевидно что я не вписываюсь в столь высокую компанию PS зевая, не сломайте челюсть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 10:47 |
|
||
|
Все таки Oracle впереди планеты всей!
|
|||
|---|---|---|---|
|
#18+
softwarer дабы вспоминать её каждый раз, когда Дмитрий сумеет нагуглить очередную оракловую мелочь. Чисто ради точности: ораклятые "мелочи" я не гуглю. Мне более чем достаточно собственного опыта. Ну и чтения соответствующего раздела на этом форуме. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2010, 11:51 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1552783]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
405ms |
get tp. blocked users: |
2ms |
| others: | 10ms |
| total: | 496ms |

| 0 / 0 |
