Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Нарвался в Оракле. Может везде так...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Мне кажется на уровне сервера не должно быть никаких неявных преобразований никаких пустых строк в никакой NULL. В конце концов если я написал <WHERE Field = ''>, то значит именно это я и написал и не надо за меня выдумывать всякие NULL. Если мне сильно захочется контролировать, чтобы в стринговых полях не было пустых строк, никто мне не мешает сделать домен <VARCHAR() CHECK (Len(@) > 0)> и выбирать его в качестве типа для строк или же где нужно делать BEFORE TRIGGER, который пустые строки явно преобразовывает в NULL.

автор
Ещё в аксессе так же, как и в оракле Только в отличие от оракла поведение можно себе на голову изменить :

If you want Microsoft Access to store a zero-length string instead of a Null value when you leave a field blank, set both the AllowZeroLength and Required properties to Yes.

ну и соответственно продолжение банкета :

You can use the Format property to distinguish between the display of a Null value and a zero-length string. For example, the string "None" can be displayed when a zero-length string is entered.

Нуу, так как PowerBuilder дедушка Access, то естественно в нем то же самое. И я считаю это правильным - программист клиентской части на каждое поле вправе выставить флаги "IsEmptyToNull" (если пустое, то в NULL) и "Required" (обязательно к заполнению), таким образом вводя дополнительную проверку на ввод данных к контролю БД. Ну а для тех инструментов построения клиентских приложений, у которых такой возможности контроля преобразования пустых значений нет ... считаю это их личными проблемами, ни коим образом не влияющими на работу СУБД и уж тем более механизм интрепретации пустых строк и NULL.
9 мар 05, 07:05    [1370222]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
softwarer
Пользователю, благодаря Вам вынужденному помнить

Попрошу не примазывать меня к программистам СУБД Оракл и программ сделанных на его основе. Смею заверить, что это вовсе не благодаря мне.
9 мар 05, 12:12    [1371059]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
Александр Гoлдун

ye z пишет:
> Во-первых, с какого это перепугу в числовое поле идет NULL? Ввод был?
> Был. Величина NULL может появиться только в двух случаях - либо был
> insert и в списке полей это поле не указано, и у поля нет дефолтового
> значения, либо был insert или update и значение поля было явно указано
> как NULL. Вы указывали NULL явно самолично?
Конечно! Путем стирания числового значения.

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

Александр Гoлдун

ну я пишет:
> note: ye z - это я.
Это диагноз...

Не перегибайте.
9 мар 05, 12:35    [1371178]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
ну я
softwarer
Пользователю, благодаря Вам вынужденному помнить

Попрошу не примазывать меня к программистам СУБД Оракл

Я Вас как раз отмазываю от этого благородного сословия. Именно Вы говорите, что стартовый null в поле, и пустая строка, появляющаяся после ввел-очистил - это две разных пустых строки. Ораклоиды так не делают.
9 мар 05, 12:42    [1371214]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
ASCRUS
Если мне сильно захочется контролировать, чтобы в стринговых полях не было пустых строк, никто мне не мешает сделать домен

И я считаю это правильным - программист клиентской части на каждое поле вправе выставить флаги "IsEmptyToNull" (если пустое, то в NULL) и "Required"

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

Повторюсь: как только я столкнулся с прямой необходимостью это предусматривать - я стал больше ценить оракловое решение.
9 мар 05, 13:30    [1371502]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
softwarer
Именно Вы говорите, что стартовый null в поле, и пустая строка, появляющаяся после ввел-очистил - это две разных пустых строки.

Ну как же Вас тянет приписать мне чего-нибудь, я даже с интересом наблюдаю.
9 мар 05, 13:33    [1371519]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
ну я
Ну как же Вас тянет приписать мне чего-нибудь, я даже с интересом наблюдаю.

Вы лучше с интересом почитайте во-первых, свои предыдущие сообщения, а во-вторых, те сообщения, на которые Вы отвечали. Авось, найдете что-нибудь занимательное.
9 мар 05, 13:39    [1371555]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
softwarer
ASCRUS
Если мне сильно захочется контролировать, чтобы в стринговых полях не было пустых строк, никто мне не мешает сделать домен

И я считаю это правильным - программист клиентской части на каждое поле вправе выставить флаги "IsEmptyToNull" (если пустое, то в NULL) и "Required"

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

Повторюсь: как только я столкнулся с прямой необходимостью это предусматривать - я стал больше ценить оракловое решение.

По мне уж лучше CHECK для поля или домена. В принципе конечно может у меня привычка сложилась не доверять программистам клиентских приложений (в том числе и себе), но на БД у меня всегда поднят полный контроль на все мыслимые чихи не только пользователей, но и программистов/админов. С одной стороны это мне гарантирует целостность данных вне зависимости от того, кто, когда и как пытался их внести. С другой стороны такой контроль неплохо себя зарекомендовал как бесплатный автотестер кодерской части, который частенько тыкает программеров клиентской части носом в различные несоотвествия того, что есть и что/как они пытаются получить/изменить. Единственное критическое место с полным отсутствием такого "тотального" контроля (да и фактически вообще какого либо) - это таблицы, которые заполняются (юзаются) расчетными алгоритмами БД (те же архивы), на которые только стоят хитрые триггера "AFTER FOR EACH STATEMENT", запрещающие их любое изменение для любого процесса, кроме самих расчетов в БД, что опять же сделано для полного перекрытия кислорода любителям поправлять ручками расчитанные цифры. Все остальное, в том числе и FOREIGN KEY с этих таблиц снято с целью обеспечения максимальной производительности расчетов. Естественно не для каждой СУБД можно легко, просто и без потери производительности опускаться до такого "параноидального" проектирования БД, но с другой стороны если мне СУБД позволяет, то я не пожалею времени подстраховаться от человеческих ошибок :)
9 мар 05, 13:45    [1371601]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
ASCRUS
По мне уж лучше CHECK для поля или домена.

По мне лучше и то, и другое. К сожалению, валить все проверки на сервер крайне неудобно - по ряду причин, скажем, сервер обычно выдает только первую ошибку, в то время как желательно показать все сразу. Полностью автоматизировать перенос ограничений с сервера на клиент не получится - есть достаточно сложные моменты, которые формальными constraint-ами не сформулируешь. Делать все ограничения в базе - оставлять ее беззащитной перед неаккуратной работой саппорта. Так что лучше объединить.

ASCRUS
но на БД у меня всегда поднят полный контроль на все мыслимые чихи не только пользователей, но и программистов/админов.

Полностью согласен и поступаю так же. И это в том числе снизит стоимость ошибки программиста клиентской части. Но подход, при котором у него практически нет шансов ошибиться, меня все равно устраивает больше. "Практически нет" - в данном случае, статистика по работе меня и коллег. Для примера - для дельфи ошибку приведения AnsiString к PChar (вызывающую access violation) я видел минимум на порядок чаще, чем ошибку с null-пустой строкой. Хотя я и первую видел не то чтобы часто :)
9 мар 05, 13:58    [1371660]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Leonid
Member [заблокирован]

Откуда: From nowhere
Сообщений: 743
softwarer
Повторюсь: как только я столкнулся с прямой необходимостью это предусматривать - я стал больше ценить оракловое решение.

Какой бред! Научитесь отделять мух от котлет.
Возьмите нормальные контролы в нормальной клиентской среде или допишите имеющиеся, если умеете конечно, и будет вам счастье с любым сервером.

Данное же поведение Oracle не вписывается в стандарт ANSI SQL.
Поэтому вы можете называть это сколь угодно замечательной фичей, но на самом деле это не очень хорошо, т.к. вносит путаницу на уровне сервера, а не на уровне ваших клиентских "фейсов":
INSERT INTO TEST(COL1) VALUES(NULL) и
INSERT INTO TEST(COL1) VALUES('')
для Oracle полностью идентичны и вставят в таблицу значения NULL, а не NULL и пустую строку.

Это отклонение от ANSI SQL, так же как отсутствие JOIN в более ранних версиях Oracle, осложняеет переносимость кода с других серверов и создание приложений работающих с разными серверами.
9 мар 05, 16:01    [1372216]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Leonid
Какой бред! Научитесь отделять мух от котлет.
Возьмите нормальные контролы в нормальной клиентской среде или допишите имеющиеся, если умеете конечно, и будет вам счастье с любым сервером.

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

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

Leonid
Данное же поведение Oracle не вписывается в стандарт ANSI SQL.

Я абсолютно уверен в том, что Вы внимательно прочитали стандарт ANSI SQL, хорошо обдумали утверждение и говорите со знанием дела. Или же Вы опираетесь на опыт MSSQL, где невозможно предсказать результат выполнения следующего простейшего скрипта:

if null = null print 'equal' else print 'not equal'
?

Leonid
Поэтому вы можете называть это сколь угодно замечательной фичей, но на самом деле это не очень хорошо, т.к. вносит путаницу

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

Leonid
для Oracle полностью идентичны и вставят в таблицу значения NULL, а не NULL и пустую строку.

На самом деле это зависит от типа колонки, но не суть. Да, это так. Утверждение "создает путаницу" при этом сродни утверждению авторов венгерской нотации - мол, ее неиспользование также создает путаницу с переменными.

Leonid
Это отклонение от ANSI SQL, так же как отсутствие JOIN в более ранних версиях Oracle, осложняеет переносимость кода с других серверов и создание приложений работающих с разными серверами.

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

Итак: да, осложняет перенос. Зато облегчает разработку. Имхо, если поднять статистику - обнаружится, что разработок существенно больше, чем переносов.
9 мар 05, 16:29    [1372368]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
2 softwarer
Допустим есть таблица с неким символьным полем fld. И есть некий параметр. Вам надо выбрать все значения равные этому параметру. Если параметр не задан (т.е. null) - ничего выбирать не нужно. Получается что в Оракле в этом случае выберуться записи с пустыми значениями, что, согласитесь, нелогично - если надо выбрать записи с пустой строчкой то и параметр должен быть задан пустой строкой.

softwarer
Я абсолютно уверен в том, что Вы внимательно прочитали стандарт ANSI SQL, хорошо обдумали утверждение и говорите со знанием дела. Или же Вы опираетесь на опыт MSSQL, где невозможно предсказать результат выполнения следующего простейшего скрипта:

if null = null print 'equal' else print 'not equal'


А Вы то хорошо обдумали? Я лично могу предсказать результат - 'not equal', поскольку null = null -> null -> false
9 мар 05, 17:00    [1372486]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
SergSuper
2 softwarer
Допустим есть таблица с неким символьным полем fld. И есть некий параметр. Вам надо выбрать все значения равные этому параметру. Если параметр не задан (т.е. null) - ничего выбирать не нужно. Получается что в Оракле в этом случае выберуться записи с пустыми значениями, что, согласитесь, нелогично

Это было бы нелогично, если бы происходило именно так. Но поскольку происходит по-другому - все будет в точности так, как Вы хотите :)

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

Да, конечно, с точки зрения "лучше, чтобы было все" это недостаток. Но - недостаток, который до недавнего времени я считал практически не мешающим. А с недавнего времени считаю еще и практически удобным :)

SergSuper

А Вы то хорошо обдумали? Я лично могу предсказать результат - 'not equal', поскольку null = null -> null -> false

Значит, как ни странно, я знаю MSSQL лучше Вас. Поскольку для меня не составит труда получить результатом скрипта как тот, так и другой результат.
9 мар 05, 17:21    [1372587]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Leonid
Member [заблокирован]

Откуда: From nowhere
Сообщений: 743
softwarer
Или расскажите мне, как нормальные контролы в нормальной клиентской среде позволят мне писать работающие запросы.
Заодно - ознакомьтесь с упоминанием недостатка, который я вижу в "нормальных клиентских контролах".

У вас не контролы типа "DBEditBox" обновляют данные в БД а запрос порождаемый на основании данных измененных этим контролом в DataSet-е.
Как это делается, сильно зависит от среды.

softwarer
Я абсолютно уверен в том, что Вы внимательно прочитали стандарт ANSI SQL, хорошо обдумали утверждение и говорите со знанием дела. Или же Вы опираетесь на опыт MSSQL, где невозможно предсказать результат выполнения следующего простейшего скрипта:

Результат выполнения этого скрипта зависит от значения SET ANSI_NULLS

В случае SET ANSI_NULLS ON он будет not equal (правильно с точки зрения ANSI SQL), как вам уже объяснил SergSuper.

Если бы у Oracle был бы такой "переключатель" на "правильное понимание NULL" вопрос бы отпал сам собой.
9 мар 05, 17:59    [1372748]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Leonid
У вас не контролы типа "DBEditBox" обновляют данные в БД а запрос порождаемый на основании данных измененных этим контролом в DataSet-е.

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

Leonid

Как это делается, сильно зависит от среды.

Если Вы не понимаете, что такое "написать запрос" - боюсь, я не смогу объяснить Вам, о чем, собственно, спрашивал.

Leonid
Результат выполнения этого скрипта зависит от значения SET ANSI_NULLS

Я в курсе :)

Leonid
Если бы у Oracle был бы такой "переключатель" на "правильное понимание NULL" вопрос бы отпал сам собой.

"Правильное", видимо, равно "как в MSSQL"?

На заданный вопрос Вы не ответили: Вы действительно внимательно проанализировали стандарт? Какой именно? Или просто вякаете "не соответствует", поскольку не соответствует известной Вам реализации, про которую говорят, что она соответствует стандарту?

Кстати, если бы был переключатель - это было бы хуже любого решения. Самое мерзкое, что имеет разработчик - знание, что "посмотреть на программный код" недостаточно, чтобы быть уверенным, как же он будет работать. Что и показывает мой пример - судя по объяснению SergSuper, наткнувшись в форуме на проблему типа "у меня такой скрипт выдает "равно"", он сказал бы "такого не может быть".
9 мар 05, 18:10    [1372784]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Leonid
Member [заблокирован]

Откуда: From nowhere
Сообщений: 743
Еще раз повторю, что вы говорили:
softwarer
В каждой форме десять-двадцать полей. Итого - из десяти тысяч потенциальных "вправе" программист клиентской части несколько раз забыл, ошибся.

softwarer
Последуйте собственному примеру - отделите мух от котлет. Или расскажите мне, как нормальные контролы в нормальной клиентской среде позволят мне писать работающие запросы.
Заодно - ознакомьтесь с упоминанием недостатка, который я вижу в "нормальных клиентских контролах".


А теперь вы говорите:
softwarer
Если Вы не понимаете, что такое "написать запрос" - боюсь, я не смогу объяснить Вам, о чем, собственно, спрашивал.
Да уж, боюсь не пойму
Вы, похоже, сами прыгаете между понятиями. Хочется спросить вы сами-то понимаете о чем говорите? :)

softwarer
Другой вопрос, что судя по словам pkarklin, в MSSQL это делается сильно.. неординарно, через промежуточную обертку.
?????? О чем это вы?

Вы пишете/писали клиентские приложения? На чем?

автор
"Правильное", видимо, равно "как в MSSQL"?
Нет, как в ANSI SQL
В том же MSSQL вне зависимости от SET ANSI_NULLS, NULL <> ''

автор
На заданный вопрос Вы не ответили: Вы действительно внимательно проанализировали стандарт? Какой именно? Или просто вякаете "не соответствует", поскольку не соответствует известной Вам реализации, про которую говорят, что она соответствует стандарту?

Вы раздражены и озлоблены, а значит не правы :)

Но отвечать по хамски и я могу:
Поэтому, еще раз для тупых: пустая строка - это не NULL. NULL - это "ничто".
Придется вам с этим жить
9 мар 05, 18:37    [1372853]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
Leonid
Еще раз повторю, что вы говорили:

Заодно повторите пожалуйста то, что опустили из этого повторения.

По поводу процитированного - я говорил о нежелании ставить галочки в каждом из 10.000 dbcontrol-ов. Кроме того, я говорил о том, что "решают" по-разному, и в результате де-факто ER-ки становится недостаточно, чтобы написать запрос - нужно еще смотреть, что именно решили в каждом конкретном случае.

Leonid
softwarer
Другой вопрос, что судя по словам pkarklin, в MSSQL это делается сильно.. неординарно, через промежуточную обертку.
?????? О чем это вы?

О том, что MSSQL по каким-то странным причинам не поддерживает обычный binding параметров. Поэтому передаваемый с клиента SQL приходится либо оборачивать в вызов хранимки (кажется, sp_executesql - так, в частности, автоматом поступает ADO), либо нагружать сервер дополнительной работой по parsing-y.

В том же MSSQL вне зависимости от SET ANSI_NULLS, NULL <> ''

И?

Вы раздражены и озлоблены, а значит не правы :)

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

Поэтому, еще раз для тупых: пустая строка - это не NULL. NULL - это "ничто". Придется вам с этим жить

Если для тупых - то почему жить с этим мне? Тем более, судя по всему, с этим живете Вы.
9 мар 05, 19:37    [1372961]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Мимо пробегал...
Guest
Тут грят, что Оракл NULL и пустую строку не различает. Объясните мне, значит ли это, что если я в оракле сделаю подряд

INSERT INTO TEST(COL1) VALUES(NULL) и
INSERT INTO TEST(COL1) VALUES('')

а потом сделаю
SELECT * FROM TEST WHERE COL1 = ''

то он мне обе строки вернёт? Или он все же вернет именно так, как я это вставил - т.е. только вторую сторку?
9 мар 05, 19:58    [1372984]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Александр Гoлдун
Member

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

Мимо пробегал... пишет:
> Тут грят, что Оракл NULL и пустую строку не различает. Объясните мне,
> значит ли это, что если я в оракле сделаю подряд
>
> INSERT INTO TEST(COL1) VALUES(NULL) и
> INSERT INTO TEST(COL1) VALUES('')
>
>
> а потом сделаю
>
> SELECT * FROM TEST WHERE COL1 = ''
>
>
> то он мне обе строки вернёт? Или он все же вернет /именно так, как я это
> вставил/ - т.е. только вторую сторку?

Не угадал оба раза. Читай первое сообщение в топике.
Твой запрос не вернет вообще ничего. А вот WHERE COL1 IS NULL вернет обе
строки.

Posted via ActualForum NNTP Server 1.1

9 мар 05, 20:21    [1373010]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Мимо пробегал...
Guest
То есть фактически в Оракле LENGTH(NULL) = 0 ?
9 мар 05, 20:33    [1373018]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Мимо пробегал...
Guest
О! я опять не угадал

Спецом нашел руководство разработчика... Фраза оттуда

Если строка  str пуста, LENGTH возвращает NULL.
.... Мне это не нравиться. Объясню. Я точно знаю, что у вставляемой мною строки 0 символов (не 1 и не 2) - я это проконтролировал. А что я получу на выходе? Я получу неопределённость. Я не буду спорить правильно ли это с точки зрения разработчика (или неправильно), но налицо потеря данных - а иначе это не назовешь.

ИМХО обзывая это как "известная багофича" последнее слово надо писать как "багофича".
9 мар 05, 20:44    [1373026]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
Александр Гoлдун
> INSERT INTO TEST(COL1) VALUES(NULL) и
> INSERT INTO TEST(COL1) VALUES('')
> а потом сделаю
>
> SELECT * FROM TEST WHERE COL1 = ''
Твой запрос не вернет вообще ничего. А вот WHERE COL1 IS NULL вернет обе
строки.

Александр, не флейма ради, а истины для: в нашей системе за подобные шалости сервера нас бы давно порвали на британский флаг. Это я к тому, что мир разнообразен и не сводится к глобусу Оракла.
9 мар 05, 21:31    [1373051]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
Мимо пробегал...
Если строка str пуста, LENGTH возвращает NULL.

Прошу прощения, а что вставится в таком запросе
insert into test( intcol) values( LENGTH(:a) + LENGTH(:b))
если один из параметров a или b окажется пустой строкой? Тоже NULL?
9 мар 05, 21:42    [1373058]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
автор
Значит, как ни странно, я знаю MSSQL лучше Вас. Поскольку для меня не составит труда получить результатом скрипта как тот, так и другой результат.

Вы не находите что всё-таки есть разница между "результат неопределён" и "результат зависит от настроек"?
А то напишите SET PARSEONLY On и с чистой совестью можете говорить что MS SQL вообще ни один запрос не может выполнить.

Что касается стандарта ANSI, точнее его внимательного прочтения. Я лично его не читал, не знаю читал ли его Leonid, сомневаюсь что Вы его читали, но думаю в MS то кто-то его читал, не просто так же они назвали ANSI_NULLS
9 мар 05, 22:58    [1373101]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
eNose
Member

Откуда:
Сообщений: 183063
2 softwarer:

кроме строковых, есть и другие типы. для каждого делать своё поведение на null?
например, BLOB. Может при вставке вордовского документа стоит проверить его на "пустоту" и вставить null вместо пустого документа (а он ведь есть, хоть и пустой)? ;)
10 мар 05, 08:39    [1373336]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить