powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Нарвался в Оракле. Может везде так...
71 сообщений из 71, показаны все 3 страниц
Нарвался в Оракле. Может везде так...
    #32883169
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нарвался, тут, случайно. Усе просто, как репа (пареная).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE TEST
(
   ID NUMBER,
   TEXT VARCHAR(  128 )
);

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

Ну и далее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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 вместо ''. Ну шо, бум знать. А в других базах как. Может, это стандартное поведение?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32883183
Yo!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Yo!
Гость
т.к. оракл появился задолго до стандартов то ...
/topic/145574&pg=23#1263187
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32883184
protector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это типа багофича Оракула. В других СУБД не так. Смотри топик здесь: "MS SQL > Oracle = True?" там про это говорили.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32883191
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokНарвался, тут, случайно. Усе просто, как репа (пареная).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE TEST
(
   ID NUMBER,
   TEXT VARCHAR(  128 )
);

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

Ну и далее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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 наоборот
третий запрос одна строка, четвертый ни одной
только что проверил
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32883481
Фотография www.fun4me.narod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Баян!

Стандартная оракловая багфича...
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32883866
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrushokНарвался, тут, случайно. Усе просто, как репа (пареная).
http://softwarer.ru/Oracle/oracle_facts.html
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32883989
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sybase ASE интерпретирует пустую строку как NULL.
http://www.sybase.ru/forum/forum.pl?group=sybase.ru.dbms.ase&start=525&article=444

Тому кто это придумал, я бы гвоздь в голову забил.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32884876
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sybase ASE интерпретирует пустую строку как NULL.
наглое враньё.
топик на который ссылку привел до конца дочитал?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32895669
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пертаскивал программку и базу с db2 на oracle, тоже на эту хрень наткнулся (в db2 пустая строка это пустая строка). данные в db2 и oracle значит теперь разные. ну и ладно. это не моя проблема. если у кого что не сростется -- это все oracle виноват.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32946572
NewYearпертаскивал программку и базу с db2 на oracle, тоже на эту хрень наткнулся.

Когда-то это стало для меня разочарованием года :)) И в работе действительно иногда мешает.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32948105
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо это, что можно еще сказать.
Пустая строка - это не NULL ни при каких обстоятельствах!

Такое "разумное" поведение Oracle - не есть good :(
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32948142
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid пишет:
> Плохо это, что можно еще сказать.
> *Пустая строка - это не NULL ни при каких обстоятельствах!*
>
> Такое "разумное" поведение Oracle - не есть good :(

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

Вопрос на засыпку. Есть форма редактирования чего-нибудь. Там есть
числовое и текстовое поля. Заполнены. Стираю число. Выделяю весь текст в
текстовом поле и нажимаю Del. В числовое поле в БД сохраняется NULL. А
что должно сохраниться в текстовое поле, NULL или ''?
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32948158
f2f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
f2f
Гость
[quot Александр Гoлдун]что должно сохраниться в текстовое поле, NULL или ''?/quot] А вот пусть форма и решает, что нужно. При чем здесь база ?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32948578
ye z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр ГoлдунВопрос на засыпку. Есть форма редактирования чего-нибудь. Там есть числовое и текстовое поля. Заполнены. Стираю число. Выделяю весь текст в текстовом поле и нажимаю Del. В числовое поле в БД сохраняется NULL. А что должно сохраниться в текстовое поле, NULL или ''?
Во-первых, с какого это перепугу в числовое поле идет NULL? Ввод был? Был. Величина NULL может появиться только в двух случаях - либо был insert и в списке полей это поле не указано, и у поля нет дефолтового значения, либо был insert или update и значение поля было явно указано как NULL. Вы указывали NULL явно самолично? Рядом с полем ввода стоял чекбокс "неопределенное значение"? Нет? Так отчего же в базе данных оказалось вранье? Да, именно вранье, поскольку сохранилось не то значение, которое указывалось при сохранении.
Во - вторых, то же самое со строкой.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32948582
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
note: ye z - это я.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950030
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidПлохо это, что можно еще сказать.
Пустая строка - это не NULL ни при каких обстоятельствах!

Такое "разумное" поведение Oracle - не есть good :(
Сложно сказать. На самом деле, ввязавшись в проект на MSSQL, я тут же оценил удобство этого "разумного поведения".
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950038
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f2fА вот пусть форма и решает, что нужно.
Надоедает решать это в каждой форме. Еще больше надоедает, когда в половине случаев решили так, в половине - этак, а в результате структуры данных (например, ER) становится недостаточно, чтобы написать работающий запрос.

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

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

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

Если говорить об edit-ах, в них команда очистки данных - именно что удаление всех символов. Это стандартная метафора любого интефейса (вовсе не обязательно БД-), и если приложение трактует ситуацию так, что то пустое значение, которое было в edit-е изначало, резко отличается от пустого значения, появившегося после стирания содержимого - хм, пользователь будет просто в восторге. Оказывается, теперь посмотреть на экран станет недостаточным чтобы понять, какие же данные пойдут в базу - надо пристально следить за всем, что делал оператор.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950045
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё в аксессе так же, как и в оракле Только в отличие от оракла поведение можно себе на голову изменить :

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.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950086
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПожалуйста, опубликуйте имя гуру, чье мнение является столь категоричным аргументом.
Честно - не помню уже. Помню, что в области sql к нему в основном прислушивались.
softwarerДействительно вранье, только Ваше. При сохранении указывалось именно значение null.
А я-то в чем наврал? Что пустая строка - это пустая строка? Господин softwarer, лично Вам: я наврал, пустая строка - это не пустая строка. Легче стало?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950244
Один
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer LeonidПлохо это, что можно еще сказать.
Пустая строка - это не NULL ни при каких обстоятельствах!

Такое "разумное" поведение Oracle - не есть good :(
Сложно сказать. На самом деле, ввязавшись в проект на MSSQL, я тут же оценил удобство этого "разумного поведения". И наоборот
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950248
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ye z пишет:

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

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

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

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

Это диагноз...
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950274
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey ShЕщё в аксессе так же, как и в оракле Только в отличие от оракла поведение можно себе на голову изменить :
Это, пожалуй, хуже всего. Как правило даже неудачное, но постоянное решение решение лучше переключателя, из-за которого "вроде бы правильный" код в какой-то ситуации может стать ошибочным.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950280
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яА я-то в чем наврал? Что пустая строка - это пустая строка? Господин softwarer, лично Вам: я наврал, пустая строка - это не пустая строка. Легче стало?
Смотря кому. Пользователю, благодаря Вам вынужденному помнить, что пустая строка в момент открытия формы и пустая строка после ввода-стирания - это две принципиально разных пустых строки, вряд ли станет намного легче. Может, конечно, появится чувство морального удовлетворения от того, что "это не бага, это фича".
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950282
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОдинИ наоборот
Неудивительно, в общем-то :) Но пока моя статистика такова: я нашел единственное место, где разделение null и пустой строки имеет смысл, и практически всю программу - где их надо обрабатывать совершенно одинаково.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950310
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey ShЕщё в аксессе так же, как и в оракле Только в отличие от оракла поведение можно себе на голову изменить
На самом деле не совсем так.
В аксесе св-во AllowZeroLength влияет только на формочки для редактирования, но никак не на SQL-запросы. Т.е. "insert into tablename (fieldname) values ("")" не будет преобразованно в "insert into tablename(fieldname) values(null)" - независимо от значения св-ва AllowZeroLength
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950360
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется на уровне сервера не должно быть никаких неявных преобразований никаких пустых строк в никакой 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.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32950960
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПользователю, благодаря Вам вынужденному помнить
Попрошу не примазывать меня к программистам СУБД Оракл и программ сделанных на его основе. Смею заверить, что это вовсе не благодаря мне.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951030
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гoлдун
ye z пишет:
> Во-первых, с какого это перепугу в числовое поле идет NULL? Ввод был?
> Был. Величина NULL может появиться только в двух случаях - либо был
> insert и в списке полей это поле не указано, и у поля нет дефолтового
> значения, либо был insert или update и значение поля было явно указано
> как NULL. Вы указывали NULL явно самолично?
Конечно! Путем стирания числового значения.
Тема об эквивалентности пустой строки и NULL а также пустой строки в поле ввода числа / валюта / дата - флеймовая. И давайте впредь не распространять внутренние соглашения одной отдельно взятой системы, к которой Вы привыкли, на все остальные какие только есть. Если у Вас принята такая эквивалентность, то так и пишите - у нас это (я не буду возражать если укажете где именно) так-то и так-то, все пользователи предупреждены и все такое, мы решаем вопросы согласования данных / экспорта / импорта так-то и так-то. Мы с интересом это прочтем.

Александр Гoлдун
ну я пишет:
> note: ye z - это я.
Это диагноз...
Не перегибайте.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951055
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я softwarerПользователю, благодаря Вам вынужденному помнить
Попрошу не примазывать меня к программистам СУБД Оракл
Я Вас как раз отмазываю от этого благородного сословия. Именно Вы говорите, что стартовый null в поле, и пустая строка, появляющаяся после ввел-очистил - это две разных пустых строки. Ораклоиды так не делают.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951196
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЕсли мне сильно захочется контролировать, чтобы в стринговых полях не было пустых строк, никто мне не мешает сделать домен

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

Повторюсь: как только я столкнулся с прямой необходимостью это предусматривать - я стал больше ценить оракловое решение.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951205
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИменно Вы говорите, что стартовый null в поле, и пустая строка, появляющаяся после ввел-очистил - это две разных пустых строки.
Ну как же Вас тянет приписать мне чего-нибудь, я даже с интересом наблюдаю.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951225
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яНу как же Вас тянет приписать мне чего-нибудь, я даже с интересом наблюдаю.
Вы лучше с интересом почитайте во-первых, свои предыдущие сообщения, а во-вторых, те сообщения, на которые Вы отвечали. Авось, найдете что-нибудь занимательное.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951250
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer ASCRUSЕсли мне сильно захочется контролировать, чтобы в стринговых полях не было пустых строк, никто мне не мешает сделать домен

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

Повторюсь: как только я столкнулся с прямой необходимостью это предусматривать - я стал больше ценить оракловое решение.
По мне уж лучше CHECK для поля или домена. В принципе конечно может у меня привычка сложилась не доверять программистам клиентских приложений (в том числе и себе), но на БД у меня всегда поднят полный контроль на все мыслимые чихи не только пользователей, но и программистов/админов. С одной стороны это мне гарантирует целостность данных вне зависимости от того, кто, когда и как пытался их внести. С другой стороны такой контроль неплохо себя зарекомендовал как бесплатный автотестер кодерской части, который частенько тыкает программеров клиентской части носом в различные несоотвествия того, что есть и что/как они пытаются получить/изменить. Единственное критическое место с полным отсутствием такого "тотального" контроля (да и фактически вообще какого либо) - это таблицы, которые заполняются (юзаются) расчетными алгоритмами БД (те же архивы), на которые только стоят хитрые триггера "AFTER FOR EACH STATEMENT", запрещающие их любое изменение для любого процесса, кроме самих расчетов в БД, что опять же сделано для полного перекрытия кислорода любителям поправлять ручками расчитанные цифры. Все остальное, в том числе и FOREIGN KEY с этих таблиц снято с целью обеспечения максимальной производительности расчетов. Естественно не для каждой СУБД можно легко, просто и без потери производительности опускаться до такого "параноидального" проектирования БД, но с другой стороны если мне СУБД позволяет, то я не пожалею времени подстраховаться от человеческих ошибок :)
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951299
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSПо мне уж лучше CHECK для поля или домена.
По мне лучше и то, и другое. К сожалению, валить все проверки на сервер крайне неудобно - по ряду причин, скажем, сервер обычно выдает только первую ошибку, в то время как желательно показать все сразу. Полностью автоматизировать перенос ограничений с сервера на клиент не получится - есть достаточно сложные моменты, которые формальными constraint-ами не сформулируешь. Делать все ограничения в базе - оставлять ее беззащитной перед неаккуратной работой саппорта. Так что лучше объединить.

ASCRUSно на БД у меня всегда поднят полный контроль на все мыслимые чихи не только пользователей, но и программистов/админов.
Полностью согласен и поступаю так же. И это в том числе снизит стоимость ошибки программиста клиентской части. Но подход, при котором у него практически нет шансов ошибиться, меня все равно устраивает больше. "Практически нет" - в данном случае, статистика по работе меня и коллег. Для примера - для дельфи ошибку приведения AnsiString к PChar (вызывающую access violation) я видел минимум на порядок чаще, чем ошибку с null-пустой строкой. Хотя я и первую видел не то чтобы часто :)
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951678
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПовторюсь: как только я столкнулся с прямой необходимостью это предусматривать - я стал больше ценить оракловое решение.
Какой бред! Научитесь отделять мух от котлет.
Возьмите нормальные контролы в нормальной клиентской среде или допишите имеющиеся, если умеете конечно, и будет вам счастье с любым сервером.

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

Это отклонение от ANSI SQL, так же как отсутствие JOIN в более ранних версиях Oracle, осложняеет переносимость кода с других серверов и создание приложений работающих с разными серверами.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951777
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidКакой бред! Научитесь отделять мух от котлет.
Возьмите нормальные контролы в нормальной клиентской среде или допишите имеющиеся, если умеете конечно, и будет вам счастье с любым сервером.
Последуйте собственному примеру - отделите мух от котлет. Или расскажите мне, как нормальные контролы в нормальной клиентской среде позволят мне писать работающие запросы.

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

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

Код: plaintext
1.
if null = null print 'equal' else print 'not equal'
?

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

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

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

Итак: да, осложняет перенос. Зато облегчает разработку. Имхо, если поднять статистику - обнаружится, что разработок существенно больше, чем переносов.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951859
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 softwarer
Допустим есть таблица с неким символьным полем fld. И есть некий параметр. Вам надо выбрать все значения равные этому параметру. Если параметр не задан (т.е. null) - ничего выбирать не нужно. Получается что в Оракле в этом случае выберуться записи с пустыми значениями, что, согласитесь, нелогично - если надо выбрать записи с пустой строчкой то и параметр должен быть задан пустой строкой.

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

Код: plaintext
if null = null print 'equal' else print 'not equal'


А Вы то хорошо обдумали? Я лично могу предсказать результат - 'not equal', поскольку null = null -> null -> false
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32951931
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper2 softwarer
Допустим есть таблица с неким символьным полем fld. И есть некий параметр. Вам надо выбрать все значения равные этому параметру. Если параметр не задан (т.е. null) - ничего выбирать не нужно. Получается что в Оракле в этом случае выберуться записи с пустыми значениями, что, согласитесь, нелогично
Это было бы нелогично, если бы происходило именно так. Но поскольку происходит по-другому - все будет в точности так, как Вы хотите :)

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

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

SergSuper
А Вы то хорошо обдумали? Я лично могу предсказать результат - 'not equal', поскольку null = null -> null -> false
Значит, как ни странно, я знаю MSSQL лучше Вас. Поскольку для меня не составит труда получить результатом скрипта как тот, так и другой результат.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952055
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИли расскажите мне, как нормальные контролы в нормальной клиентской среде позволят мне писать работающие запросы.
Заодно - ознакомьтесь с упоминанием недостатка, который я вижу в "нормальных клиентских контролах".
У вас не контролы типа "DBEditBox" обновляют данные в БД а запрос порождаемый на основании данных измененных этим контролом в DataSet-е.
Как это делается, сильно зависит от среды.

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

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

Если бы у Oracle был бы такой "переключатель" на "правильное понимание NULL" вопрос бы отпал сам собой.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952082
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidУ вас не контролы типа "DBEditBox" обновляют данные в БД а запрос порождаемый на основании данных измененных этим контролом в DataSet-е.
"Запрос, порожденный на основании данных" - это, извините, бред. Данные - параметры - подставляются в запрос, в том числе в MSSQL. Другой вопрос, что судя по словам pkarklin , в MSSQL это делается сильно.. неординарно, через промежуточную обертку.

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

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

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

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

Кстати, если бы был переключатель - это было бы хуже любого решения. Самое мерзкое, что имеет разработчик - знание, что "посмотреть на программный код" недостаточно, чтобы быть уверенным, как же он будет работать. Что и показывает мой пример - судя по объяснению SergSuper, наткнувшись в форуме на проблему типа "у меня такой скрипт выдает "равно"", он сказал бы "такого не может быть".
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952135
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз повторю, что вы говорили:
softwarerВ каждой форме десять-двадцать полей. Итого - из десяти тысяч потенциальных "вправе" программист клиентской части несколько раз забыл, ошибся.
softwarerПоследуйте собственному примеру - отделите мух от котлет. Или расскажите мне, как нормальные контролы в нормальной клиентской среде позволят мне писать работающие запросы.
Заодно - ознакомьтесь с упоминанием недостатка, который я вижу в "нормальных клиентских контролах".

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

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

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

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

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

Но отвечать по хамски и я могу:
Поэтому, еще раз для тупых: пустая строка - это не NULL. NULL - это "ничто".
Придется вам с этим жить
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952220
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidЕще раз повторю, что вы говорили:
Заодно повторите пожалуйста то, что опустили из этого повторения.

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

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

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

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

Поэтому, еще раз для тупых: пустая строка - это не NULL. NULL - это "ничто". Придется вам с этим жить
Если для тупых - то почему жить с этим мне? Тем более, судя по всему, с этим живете Вы.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952241
Тут грят, что Оракл NULL и пустую строку не различает. Объясните мне, значит ли это, что если я в оракле сделаю подряд

Код: plaintext
1.
INSERT INTO TEST(COL1) VALUES(NULL) и
INSERT INTO TEST(COL1) VALUES('')

а потом сделаю
Код: plaintext
1.
SELECT * FROM TEST WHERE COL1 = ''

то он мне обе строки вернёт? Или он все же вернет именно так, как я это вставил - т.е. только вторую сторку?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952265
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо пробегал... пишет:
> Тут грят, что Оракл 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
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952272
То есть фактически в Оракле LENGTH(NULL) = 0 ?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952279
О! я опять не угадал

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

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

ИМХО обзывая это как "известная багофича" последнее слово надо писать как "багофича".
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952298
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гoлдун> INSERT INTO TEST(COL1) VALUES(NULL) и
> INSERT INTO TEST(COL1) VALUES('')
> а потом сделаю
>
> SELECT * FROM TEST WHERE COL1 = ''
Твой запрос не вернет вообще ничего. А вот WHERE COL1 IS NULL вернет обе
строки.
Александр, не флейма ради, а истины для: в нашей системе за подобные шалости сервера нас бы давно порвали на британский флаг. Это я к тому, что мир разнообразен и не сводится к глобусу Оракла.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952302
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо пробегал...Если строка str пуста, LENGTH возвращает NULL.
Прошу прощения, а что вставится в таком запросе
insert into test( intcol) values( LENGTH(:a) + LENGTH(:b))
если один из параметров a или b окажется пустой строкой? Тоже NULL?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952336
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗначит, как ни странно, я знаю MSSQL лучше Вас. Поскольку для меня не составит труда получить результатом скрипта как тот, так и другой результат.
Вы не находите что всё-таки есть разница между "результат неопределён" и "результат зависит от настроек"?
А то напишите SET PARSEONLY On и с чистой совестью можете говорить что MS SQL вообще ни один запрос не может выполнить.

Что касается стандарта ANSI, точнее его внимательного прочтения. Я лично его не читал, не знаю читал ли его Leonid, сомневаюсь что Вы его читали, но думаю в MS то кто-то его читал, не просто так же они назвали ANSI_NULLS
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952493
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
2 softwarer:

кроме строковых, есть и другие типы. для каждого делать своё поведение на null?
например, BLOB. Может при вставке вордовского документа стоит проверить его на "пустоту" и вставить null вместо пустого документа (а он ведь есть, хоть и пустой)? ;)
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952654
x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
x
Гость
Не понимаю о чем вы спорите

То, что сделано в Оракле, правильно по определению
Если это не соответствует стандарту - тем хуже для стандарта
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952770
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо пробегал...
Код: plaintext
Если строка  str пуста, LENGTH возвращает NULL.
.... Мне это не нравиться.
Это никому не нравится :) Безусловно, по-своему логично, но претензии ораклоидов к реализации сводятся почти исключительно именно к этой детали; хочется, чтобы length('') == 0.

Мимо пробегал...Вы не находите что всё-таки есть разница между "результат неопределён" и "результат зависит от настроек"?
Я нахожу, что я сказал совершенно однозначную фразу: "невозможно предсказать результат выполнения скрипта [по тексту этого скрипта]". Мало того, SergSuper, уверенно предсказав результат, продемонстрировал именно ту опасность, которую я имел в виду.

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

Мимо пробегал...Что касается стандарта ANSI, точнее его внимательного прочтения. Я лично его не читал, не знаю читал ли его Leonid, сомневаюсь что Вы его читали,
Читал. И знаю, как он построен. Почему и отношусь к заявлениям "нарушает стандарт" очень, назовем так, скептически - ANSI SQL построен так, что его трудно нарушить. Если говорить о стандарте-2003 - в него ухитрились внести как SEQUENCE, так и IDENTITY, но не сделали при этом напрашивающегося, актуального и абсолютно естественного шага - IDENTITY, запитанного от SEQUENCE. Полагаю, понимаете, почему.

Мимо пробегал...но думаю в MS то кто-то его читал, не просто так же они назвали ANSI_NULLS
Думаю, читали. Мало того, если Вы обратите внимания - я нигде не говорил, что MSSQL нарушает стандарт. Но делать из этого (и только из этого) вывод, что любая другая реализация стандарт нарушает - значит, демонстрировать неграмотность и неумность.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952793
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseкроме строковых, есть и другие типы. для каждого делать своё поведение на null?
Практической необходимости в этом я не вижу. Увижу - скажу, что хорошо бы сделать. Именно с блобами в Oracle связан не слишком удобный момент, проистекающий из реализации блобов - необходимость использовать функцию EMPTY_BLOB(). Это вызывает те же самые проблемы - скажем, проверка на пустоту блоба вообще говоря должна идти через coalesce (dbms_lob.length(blob), 0)=0 - но поскольку работа с блобами - не самая эффективная задача, таких проверок обычно избегают, не оставляя полям значения EMPTY_BLOB.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32952933
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я пишет:

> Александр, не флейма ради, а истины для: в нашей системе за подобные
> шалости сервера нас бы давно порвали на британский флаг. Это я к тому,
> что мир разнообразен и не сводится к глобусу Оракла.

Конечно не сводится. Я Оракл и не использую. И не уверен, что в
ближайшее время буду использовать даже для немаленьких баз. Меня ASA
больше устраивает по множеству параметров.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32953500
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот кстати что ANSI стандарт говорит

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Values are either a null value or a non-null value.

         A null value is an implementation-dependent special value that
         is distinct from all non-null values of the associated data type.
         There is effectively only one null value and that value is a member
         of every SQL data type.  There is no <literal> for a null value 
         although the keyword NULL is used in some places to indicate that a
         null value is desired.
По-моему совершенно однозначно сказано.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32953946
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПо поводу процитированного - я говорил о нежелании ставить галочки в каждом из 10.000 dbcontrol-ов. Кроме того, я говорил о том, что "решают" по-разному, и в результате де-факто ER-ки становится недостаточно, чтобы написать запрос - нужно еще смотреть, что именно решили в каждом конкретном случае.Выберите/напишите контролы, где не надо ставить галочки . Наследование то же ни кто не отменял.

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

softwarerЭто никому не нравится :) Безусловно, по-своему логично, но претензии ораклоидов к реализации сводятся почти исключительно именно к этой детали; хочется, чтобы length('') == 0.Вот, блин, и приплыли. Одно тянет за собой другое. Стоит ли говорить после этого, что стандарты, не дураками писаны.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954263
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperА вот кстати что ANSI стандарт говорит.
Браво. Кстати, Вы прочитали то место, где говорится, что <literal> - это вовсе не строковая константа?

Теперь два комментария. Комментарий первый: здесь сказано "нет" (то есть - "нет в стандарте"). С чем никто не спорит. Для того, чтобы наличие такого литерала противоречило стандарту, здесь пришлось бы увидеть "не должно быть литерала...". Почему? По той простой причине, что иначе любое расширение стандарта придется считать нарушением оного.

Теперь второй комментарий - о соответствии стандарту вообще. Позволю себе другую фразу из стандарта (SQL'92, сейчас нет под рукой новее)

Код: plaintext
Let set operation be UNION [ALL], EXCEPT [ALL], or INTERSECT [ALL].

Сколько из этих операций Вы найдете в MSSQL? Говорите, он соответствует стандарту?

Нет, соответствует, я с этим не собираюсь спорить. Соответствовать, как известно, можно по-разному. А вот противоречить - ... Вы сделали хорошую попытку, но обреченную на неудачу. Если бы все действительно было однозначно - как думаете, смог бы Оракл заявлять о соответствии стандарту? Полагаете, их спецы не просчитали все тонкости? А спецы того же мелкософта не протестировали их работу?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954281
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidВыберите/напишите контролы, где не надо ставить галочки .
Решение, безусловно, лучшее чем ничего, но недостаточное. Оно позволяет ставить меньше пяти тысяч галочек - безусловно. От ошибок, однако, оно не спасает.

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

Наследование то же ни кто не отменял.

LeonidА чем вас пугает вызов "хранимки" sp_executesql?
Вызов хранимки меня не пугает. Меня пугает идея "формировать sql из данных" - я не вижу пути понять это иначе, чем

Код: plaintext
sql = "select ... where parent_id = " + ParentId + " and record_type = " + RecordType + ...

Эта идея меня "пугает" - правда, это уже тема другой беседы.

Если хотите, считайте, что я придираюсь к словам.

LeonidВот, блин, и приплыли. Одно тянет за собой другое.
Есть такой эффект. В данном случае в Oracle именно что сказали А, но не решились сказать Б.

Из этого не следует, что не стоило говорить А. Даже без Б - с моей точки зрения - его стоило сказать. Но лучше было бы сказать и Б тоже; с этим я согласен.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954377
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Браво. Кстати, Вы прочитали то место, где говорится, что <literal> - это вовсе не строковая константа?

Теперь два комментария. Комментарий первый: здесь сказано "нет" (то есть - "нет в стандарте"). С чем никто не спорит. Для того, чтобы наличие такого литерала противоречило стандарту, здесь пришлось бы увидеть "не должно быть литерала...". Почему? По той простой причине, что иначе любое расширение стандарта придется считать нарушением оного.

Если сказано что "нет" - значит не должно быть. Расширения допускаются там, где это никак не оговорено. И я бы перевёл как "не бывает литералов..."
А из определения литерала видно что строковая константа один из видов литералов.

Еще сказано что есть только одно only one null value, а в Оракле получается два - и пустая строка и null. Ну да, тоже расширения.

softwarerLet set operation be UNION [ALL], EXCEPT [ALL], or INTERSECT [ALL].

Сколько из этих операций Вы найдете в MSSQL? Говорите, он соответствует стандарту?

И где ж я такое говорил то? Единственно что я хотел сказать (а говорил еще меньше) - что превращение пустой строки в NULL это нелогично и неудобно. В MS SQL 4.2.1 тоже была такая фигня и мне это совершенно не нравилось. И чесно говоря удивляет чем же Вам это так нравится. А все эти стандарты мне по барабану.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954683
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer LeonidА чем вас пугает вызов "хранимки" sp_executesql?
Вызов хранимки меня не пугает. Меня пугает идея "формировать sql из данных" - я не вижу пути понять это иначе, чем


А меня ПУГАЕТ, то что ADO имеет наглость лезть ВНУТРЬ запроса.
Неправильно выправлять кривизну сервера кривизной методов доступа
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954756
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)А меня ПУГАЕТ, то что ADO имеет наглость лезть ВНУТРЬ запроса.
Не совсем так. По моим ощущениям, ADO - продукт примерно того же класса, что и BDE, со всеми теми же преимуществами-недостатками, но именно в данном случае большого криминала нет - ADO не лезет в запрос, а оборачивает его, вызывает хранимку, передавая ей текст запроса.

Правда, какую-то бяку с параметрами при этом я видел.

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

Gluk (Kazan)Неправильно выправлять кривизну сервера кривизной методов доступа
Безусловно. Собственно, после того разговора мне стало много понятнее, почему с точки зрения MSSQL-евцев все надо делать на хранимках. В частности, иначе там идет принудительный cursor_sharing=force.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954796
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, понял :)

У нас тут с ADO 1С-ник неделю назад трахался. Она кволочь пыталась сделать запрос обновляемым, заботливо вставляя в него ROWID, а 1С этой заботы не понимала Потом еще пришлось обернуть все типы в TO_CHAR, но это уже камушек в 1C :)
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954904
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan) softwarer LeonidА чем вас пугает вызов "хранимки" sp_executesql?
Вызов хранимки меня не пугает. Меня пугает идея "формировать sql из данных" - я не вижу пути понять это иначе, чем


А меня ПУГАЕТ, то что ADO имеет наглость лезть ВНУТРЬ запроса.
Неправильно выправлять кривизну сервера кривизной методов доступа

Собственно ADO(OLEDB) так и были задуманы, чтобы лезть в нутро запроса и делать массу других малополезных вещей(автоматически строить INSERT и UPDATE для начала). Правда корректная установка свойств и атрибутов соединения/команды позволяет извести эти чудачества начисто.
Всё семейство процедур sp_exec%,sp_prep%,sp_cursor% служит для выправления чудачеств безнадёжно устаревшего TDS 4.2, 7, 8, но это тема для отдельной дискуссии.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32954962
Фотография Leonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНе совсем так. По моим ощущениям, ADO - продукт примерно того же класса, что и BDE, со всеми теми же преимуществами-недостатками, но именно в данном случае большого криминала нет - ADO не лезет в запрос, а оборачивает его, вызывает хранимку, передавая ей текст запроса.Не отдавайтесь на волю ощущениям :) А то как в анекдоте: Так вы всю науку к @#$% сведете :)
ADO - это ActiveX обертка поверх OLE DB. OLE DB же сам по себе очень эфективный механизм.
BDE здесь ни при чем и классы и способы низкоуровневого доступа у них разные. Сравнивать их по меньшей мере не корректно.

softwarerЕсть такой эффект. В данном случае в Oracle именно что сказали А, но не решились сказать Б.
Из этого не следует, что не стоило говорить А. Даже без Б - с моей точки зрения - его стоило сказать. Но лучше было бы сказать и Б тоже; с этим я согласен.Ну не знаю, на мой взгляд, "А" того не стоило.
Ну да, в конце концов, вам с этим возиться, не мне.
Я же скорее соглашусь с SergSuper:
SergSuperпревращение пустой строки в NULL это нелогично и неудобно
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955039
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidНе отдавайтесь на волю ощущениям :) А то как в анекдоте: Так вы всю науку к @#$% сведете :) ADO - это ActiveX обертка поверх OLE DB. OLE DB же сам по себе очень эфективный механизм.
Мне ближе точка зрения Alexey Sh - про "изведение чудачеств".

Leonid
BDE здесь ни при чем и классы и способы низкоуровневого доступа у них разные. Сравнивать их по меньшей мере не корректно.
Хм. Как бы Вам сказать.. смотреть можно с разных точек зрения.

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

LeonidНу да, в конце концов, вам с этим возиться, не мне.
Безусловно :) С тем моментом, что как раз "возиться" и оказывается ненужным.

Собственно, пример на эту тему только что был на RSDN - там человек спрашивал, пройдет ли в оракле запрос, составленный для DB2 и MS, и ему посоветовали заменить coalesce(...) на просто field is null. По моим текущим ощущениям, именно это - типичный случай.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955175
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Собственно, пример на эту тему только что был на RSDN - там человек спрашивал, пройдет ли в оракле запрос, составленный для DB2 и MS, и ему посоветовали заменить coalesce(...) на просто field is null. По моим текущим ощущениям, именно это - типичный случай.
:)
А как было бы удобно если для int-а при присваивании нуля подставлялся бы NULL. Это ж coalesce(field ,0)=0 можно было бы заменить на просто field is null !
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955206
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperА как было бы удобно если для int-а при присваивании нуля подставлялся бы NULL.
Это было бы очень удобно, если бы в полях ввода ноль и null отображались бы одинаково, а в логике обработки они практически всегда означали бы одно и то же.

SergSuperЭто ж coalesce(field ,0)=0 можно было бы заменить на просто field is null !
Можно было бы. "Как было бы удобно" определяется тем, насколько часто это нужно, а насколько часто - мешало бы.
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955264
Dooma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМожно было бы. "Как было бы удобно" определяется тем, насколько часто это нужно, а насколько часто - мешало бы.
Хочется повертеть пальцем у виска :)

Оставте в покое вы этих убогих ораклистов с их традициями. Не долго им осталось.
Не тронь Г пока не завоняет :)
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955282
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, почему все провокаторы не регестряться на форуме ?
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955487
налогично
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DoomaХочется повертеть пальцем у виска :)
У меня уже палец устал, читая про такие странности отдельно взятых и якобы крутых софтин ;-)
...
Рейтинг: 0 / 0
Нарвался в Оракле. Может везде так...
    #32955843
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, еще одно подтверждение
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Нарвался в Оракле. Может везде так...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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