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

Откуда: от верблюда
Сообщений: 7430
Нарвался, тут, случайно. Усе просто, как репа (пареная).
CREATE TABLE TEST
(
   ID NUMBER,
   TEXT VARCHAR( 128)
);

INSERT INTO TEST (ID, TEXT) VALUES (1, 'text1');
INSERT INTO TEST (ID, TEXT) VALUES (2, '');
COMMIT;

Ну и далее
SELECT * FROM TEST;
2 rows

SELECT * FROM TEST WHERE TEXT = 'text1';
1 row

SELECT * FROM TEST WHERE TEXT = '';  --????
no rows

SELECT * FROM TEST WHERE TEXT IS NULL;  --????
1 row

Собственно второй INSERT вставил NULL вместо ''. Ну шо, бум знать. А в других базах как. Может, это стандартное поведение?
25 янв 05, 18:15    [1272891]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Yo!
Guest
т.к. оракл появился задолго до стандартов то ...
https://www.sql.ru/forum/actualthread.aspx?bid=10&tid=145574&pg=23#1263187
25 янв 05, 18:21    [1272914]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
protector
Member

Откуда: Иваново, Россия
Сообщений: 600
Это типа багофича Оракула. В других СУБД не так. Смотри топик здесь: "MS SQL > Oracle = True?" там про это говорили.

Posted via ActualForum NNTP Server 1.1

25 янв 05, 18:22    [1272916]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Dogen
Member

Откуда: Гондурас
Сообщений: 2976
andrushok
Нарвался, тут, случайно. Усе просто, как репа (пареная).
CREATE TABLE TEST
(
   ID NUMBER,
   TEXT VARCHAR( 128)
);

INSERT INTO TEST (ID, TEXT) VALUES (1, 'text1');
INSERT INTO TEST (ID, TEXT) VALUES (2, '');
COMMIT;

Ну и далее
SELECT * FROM TEST;
2 rows

SELECT * FROM TEST WHERE TEXT = 'text1';
1 row

SELECT * FROM TEST WHERE TEXT = '';  --????
no rows

SELECT * FROM TEST WHERE TEXT IS NULL;  --????
1 row

Собственно второй INSERT вставил NULL вместо ''. Ну шо, бум знать. А в других базах как. Может, это стандартное поведение?


В mySQL наоборот
третий запрос одна строка, четвертый ни одной
только что проверил
25 янв 05, 18:24    [1272923]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Баян!

Стандартная оракловая багфича...
25 янв 05, 23:51    [1273327]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
andrushok
Нарвался, тут, случайно. Усе просто, как репа (пареная).

http://softwarer.ru/Oracle/oracle_facts.html
26 янв 05, 10:30    [1273808]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Ggg_old
Guest
Sybase ASE интерпретирует пустую строку как NULL.
http://www.sybase.ru/forum/forum.pl?group=sybase.ru.dbms.ase&start=525&article=444

Тому кто это придумал, я бы гвоздь в голову забил.
26 янв 05, 11:09    [1273969]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
Sybase ASE интерпретирует пустую строку как NULL.

наглое враньё.
топик на который ссылку привел до конца дочитал?
26 янв 05, 14:55    [1275165]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
NewYear
Member

Откуда: Большой адронный коллайдер
Сообщений: 2203
пертаскивал программку и базу с db2 на oracle, тоже на эту хрень наткнулся (в db2 пустая строка это пустая строка). данные в db2 и oracle значит теперь разные. ну и ладно. это не моя проблема. если у кого что не сростется -- это все oracle виноват.
1 фев 05, 19:19    [1292139]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Вячеслав Скорых
Member

Откуда:
Сообщений: 25
NewYear
пертаскивал программку и базу с db2 на oracle, тоже на эту хрень наткнулся.


Когда-то это стало для меня разочарованием года :)) И в работе действительно иногда мешает.
4 мар 05, 15:04    [1364095]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Leonid
Member [заблокирован]

Откуда: From nowhere
Сообщений: 743
Плохо это, что можно еще сказать.
Пустая строка - это не NULL ни при каких обстоятельствах!

Такое "разумное" поведение Oracle - не есть good :(
5 мар 05, 12:34    [1366594]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Александр Гoлдун
Member

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

Leonid пишет:
> Плохо это, что можно еще сказать.
> *Пустая строка - это не NULL ни при каких обстоятельствах!*
>
> Такое "разумное" поведение Oracle - не есть good :(

То, что пустая строка <> пустая строка (т.к. NULL) - это однозначно
бред. А вот по поводу соответствия пустой строки значению NULL - это
тема великого множества флеймов.

Вопрос на засыпку. Есть форма редактирования чего-нибудь. Там есть
числовое и текстовое поля. Заполнены. Стираю число. Выделяю весь текст в
текстовом поле и нажимаю Del. В числовое поле в БД сохраняется NULL. А
что должно сохраниться в текстовое поле, NULL или ''?

Posted via ActualForum NNTP Server 1.1

5 мар 05, 12:44    [1366649]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
f2f
Guest
[quot Александр Гoлдун]что должно сохраниться в текстовое поле, NULL или ''?/quot] А вот пусть форма и решает, что нужно. При чем здесь база ?
5 мар 05, 12:47    [1366673]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ye z
Guest
Александр Гoлдун
Вопрос на засыпку. Есть форма редактирования чего-нибудь. Там есть числовое и текстовое поля. Заполнены. Стираю число. Выделяю весь текст в текстовом поле и нажимаю Del. В числовое поле в БД сохраняется NULL. А что должно сохраниться в текстовое поле, NULL или ''?

Во-первых, с какого это перепугу в числовое поле идет NULL? Ввод был? Был. Величина NULL может появиться только в двух случаях - либо был insert и в списке полей это поле не указано, и у поля нет дефолтового значения, либо был insert или update и значение поля было явно указано как NULL. Вы указывали NULL явно самолично? Рядом с полем ввода стоял чекбокс "неопределенное значение"? Нет? Так отчего же в базе данных оказалось вранье? Да, именно вранье, поскольку сохранилось не то значение, которое указывалось при сохранении.
Во - вторых, то же самое со строкой.
5 мар 05, 15:34    [1367300]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
note: ye z - это я.
5 мар 05, 15:36    [1367306]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
Leonid
Плохо это, что можно еще сказать.
Пустая строка - это не NULL ни при каких обстоятельствах!

Такое "разумное" поведение Oracle - не есть good :(

Сложно сказать. На самом деле, ввязавшись в проект на MSSQL, я тут же оценил удобство этого "разумного поведения".
8 мар 05, 14:02    [1369670]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
f2f
А вот пусть форма и решает, что нужно.

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

ну я
Во-первых, с какого это перепугу в числовое поле идет NULL? Ввод был? Был. Величина NULL может появиться только в двух случаях

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

ну я
Да, именно вранье, поскольку сохранилось не то значение, которое указывалось при сохранении.

Действительно вранье, только Ваше. При сохранении указывалось именно значение null.

Простой пример: если взять lookup combobox или любой другой пикер данных, нормальные люди предусматривают ту или иную возможность убрать значение из этого поля. Например, сажают рядом кнопку "очистить". Я предпочитаю обрабатывать клавишу "Del". Независимо от интерфейса это именно что команда очистить поле, без никаких.

Если говорить об edit-ах, в них команда очистки данных - именно что удаление всех символов. Это стандартная метафора любого интефейса (вовсе не обязательно БД-), и если приложение трактует ситуацию так, что то пустое значение, которое было в edit-е изначало, резко отличается от пустого значения, появившегося после стирания содержимого - хм, пользователь будет просто в восторге. Оказывается, теперь посмотреть на экран станет недостаточным чтобы понять, какие же данные пойдут в базу - надо пристально следить за всем, что делал оператор.
8 мар 05, 14:14    [1369679]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Alexey Sh
Member

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

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.
8 мар 05, 14:40    [1369688]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ну я
Member

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

Честно - не помню уже. Помню, что в области sql к нему в основном прислушивались.
softwarer
Действительно вранье, только Ваше. При сохранении указывалось именно значение null.

А я-то в чем наврал? Что пустая строка - это пустая строка? Господин softwarer, лично Вам: я наврал, пустая строка - это не пустая строка. Легче стало?
8 мар 05, 16:11    [1369745]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Один
Member

Откуда: Киев
Сообщений: 781
softwarer
Leonid
Плохо это, что можно еще сказать.
Пустая строка - это не NULL ни при каких обстоятельствах!

Такое "разумное" поведение Oracle - не есть good :(

Сложно сказать. На самом деле, ввязавшись в проект на MSSQL, я тут же оценил удобство этого "разумного поведения".
И наоборот
8 мар 05, 23:03    [1370019]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
Александр Гoлдун
Member

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

ye z пишет:

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

Конечно! Путем стирания числового значения.

> Рядом с полем ввода стоял
> чекбокс "неопределенное значение"? Нет? Так отчего же в базе данных
> оказалось вранье? Да, именно вранье, поскольку сохранилось не то
> значение, которое указывалось при сохранении.

ну я пишет:
> note: ye z - это я.

Это диагноз...

Posted via ActualForum NNTP Server 1.1

8 мар 05, 23:15    [1370032]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
Alexey Sh
Ещё в аксессе так же, как и в оракле Только в отличие от оракла поведение можно себе на голову изменить :

Это, пожалуй, хуже всего. Как правило даже неудачное, но постоянное решение решение лучше переключателя, из-за которого "вроде бы правильный" код в какой-то ситуации может стать ошибочным.
9 мар 05, 00:23    [1370112]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
ну я
А я-то в чем наврал? Что пустая строка - это пустая строка? Господин softwarer, лично Вам: я наврал, пустая строка - это не пустая строка. Легче стало?

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

Откуда: 127.0.0.1
Сообщений: 67383
Блог
Один
И наоборот

Неудивительно, в общем-то :) Но пока моя статистика такова: я нашел единственное место, где разделение null и пустой строки имеет смысл, и практически всю программу - где их надо обрабатывать совершенно одинаково.
9 мар 05, 00:30    [1370121]     Ответить | Цитировать Сообщить модератору
 Re: Нарвался в Оракле. Может везде так...  [new]
ЛП
Guest
Alexey Sh
Ещё в аксессе так же, как и в оракле Только в отличие от оракла поведение можно себе на голову изменить

На самом деле не совсем так.
В аксесе св-во AllowZeroLength влияет только на формочки для редактирования, но никак не на SQL-запросы. Т.е. "insert into tablename (fieldname) values ("")" не будет преобразованно в "insert into tablename(fieldname) values(null)" - независимо от значения св-ва AllowZeroLength
9 мар 05, 01:45    [1370161]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить