Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 13 [14] 15 16 17   вперед  Ctrl
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

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

ЛП
Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?
Именно, что пишется :)
14 июл 10, 16:39    [9104163]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
Favn
А что там может получиться? В DB2 SQL и SQL PL исполняются одним процессом, без внешних VM. Естественно, результат тот же.

т.е. в дб2 процедуры на жава конкатенируют так, а sqlpl этак !?
14 июл 10, 16:44    [9104237]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Yo.!
т.е. в дб2 процедуры на жава конкатенируют так, а sqlpl этак !?
Не понял всей глубины мысли.
SQL PL - не язык общего назначения, это - встроенный язык DB2, являющийся расширением входящего в стандарт SQL/PSM. Его байт-код (если он есть, т.е. если SQL PL не подставляется inline в вызвавший его запрос) выполняется тем же процессом, что и собственно SQL - главным процессом инстанса (как, ксати, и PL/SQL - в DB2 оба языка компилячаться в один и тот же байт-код :) ).
Java - это язык общего назначения со своими правилами, ничего общего (кроме соотв. библиотек-пакаджей) с SQL не имеющий. Выполняется, конечно, на собственной VM, взаимодействуя с DB2 через один из 2-х типов драйверов. Естественно, конкатенация в SQL в JDBC и SQLJ выполняется по правилам SQL DB2. Естественно, конкатенация строк в Java выполняется по правилам Java, где null - вовсе не неопределенность, которой в core Java нет, а пустая ссылка.
Что в этом такого удивительного?
14 июл 10, 17:25    [9104764]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Yo.!,
Уточню. Для Java SP/UDF используется только один тип драйвера - type 2, работающий через DB2-ного клиента (в отличие от type 4, писаного на самой Java и в клиенте не нуждающегося). При запуске на сервере (локальном коннекте) такой клиент работает напрямую со структурами памяти инстанса DB2.
14 июл 10, 17:40    [9104892]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
Bogdanov Andrey
Favn
Понятно, что работает это только для varchar, не для char
Даже для полей типа char - пустая строка означает null:
SQL> create table a(x integer, y char(1));
Table created.
SQL> insert into a values(1,'');
1 row created.
SQL> select * from a where y is null;
         X Y
---------- -
         1
То же самое верно и для всех других типов. Можно без проблем вставить пустую строку в поле любого типа и в поле будет null. То же самое верно и с переменными в PL/SQL.
Исключением является именно присвание значения переменным типа char в PL/SQL коде.

Пардон, а если переменной типа char в PL/SQL коде присвоить значение null - что в этой переменной окажется?
14 июл 10, 18:08    [9105147]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
Favn
Естественно, конкатенация в SQL в JDBC и SQLJ выполняется по правилам SQL DB2.

процедурный код сторед процедуры на SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе ...
именно это и странно, если не сказать шизофреничненько. если конкатенация идет в процедурном коде процедуры на SQLJ работает так, если в участке декларативного SQL той же процедуры, то этак. а здесь мы рыбу заворачивали (tm)
14 июл 10, 18:20    [9105219]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
dbms_photoshop
Member

Откуда:
Сообщений: 5151
ЛП
Пардон, а если переменной типа char в PL/SQL коде присвоить значение null - что в этой переменной окажется?

SQL> set serveroutput on;
SQL> DECLARE
  2  	x CHAR(2);
  3  	v VARCHAR2(100);
  4  BEGIN
  5  	x := 0;
  6  	SELECT to_char(dump(x)) INTO v FROM dual;
  7  	dbms_output.put_line(v);
  8  	x := '0';
  9  	SELECT to_char(dump(x)) INTO v FROM dual;
 10  	dbms_output.put_line(v);
 11  	x := '';
 12  	SELECT to_char(dump(x)) INTO v FROM dual;
 13  	dbms_output.put_line(v);
 14  	x := NULL;
 15  	SELECT to_char(dump(x)) INTO v FROM dual;
 16  	dbms_output.put_line(v);
 17  END;
 18  /
 
Typ=96 Len=2: 48,32
Typ=96 Len=2: 48,32
Typ=96 Len=2: 32,32
NULL
 
PL/SQL procedure successfully completed
14 июл 10, 18:27    [9105261]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
dbms_photoshop
Member

Откуда:
Сообщений: 5151
До кучи:
SQL> select dump(value) from
  2  (select cast(0 as char(2)) value from dual
  3  union all
  4  select cast('0' as char(2)) from dual
  5  union all
  6  select cast('' as char(2)) from dual
  7  union all
  8  select cast(NULL as char(2)) from dual);
 
DUMP(VALUE)
--------------------------------------------------------------------------------
Typ=96 Len=2: 48,32
Typ=96 Len=2: 48,32
NULL
NULL
14 июл 10, 18:30    [9105274]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Yo.!,
Опять не понял. Какой-такой декларативный SQL в Java процедуре? Почему "SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе"?
В Java есть 2 способа работы с SQL - JDBC, т.е. динамический SQL, и SQLJ, т.е. статический SQL.
Насколько я помню, в Оракле SQLJ - просто синтаксический сахарок, преобразующийся в вызовы JDBC.
В DB2 это не так. SQLJ код прекомпилируется (до Java компилера) препроцессором DB2, при этом из текста запросы изымаются и сохраняются в БД в спец. "пакете" (и компилируются там уже как static SQL). В тексте программы остается фактически удаленный вызов некоей функции, с данным запросом связанной.
В любом случае, SQLJ ни в одной СУБД не выполняется JVM, которая об SQL вообще ничего не знает и знать не должна.
Где тут шизофрения? Все, что написано на SQL, будь то JDBC или SQLJ, выполняется в СУБД по правилам СУБД. Все, что написано на Java, выполняется JVM по правилам Java. В том числе и конкатенация.
Или Вы продолжаете считать, что "null" в SQL и в Java значат примерно одно и тоже? :)

PS. Кстати, а для SQLJ в Оракле при компиляции SP зависимости с объектами БД отслеживаются? Т.е. если потом в БД что-то фатально изменится, SP станет инвалидной? Или нет, как для динамики в JDBC?
14 июл 10, 18:42    [9105332]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Favn

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

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

Favn

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

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


Favn

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

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

Favn

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

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

Favn

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

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

ПС
В тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.
14 июл 10, 18:43    [9105333]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
Bogdanov Andrey
На мой взгляд, выглядит так, что указанное отличие для CHAR - ошибка, исправлять которую ни у кого нет желания :)
А на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)
14 июл 10, 18:46    [9105346]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

Откуда:
Сообщений: 585
vadiminfo
В тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.
Это утверждение было в предыдущих постах. Пожалуйста, повторю точнее:
NULL в SQL введен как обозначение неопределенного в данный момент значения. Это следует из получения NULL как результата любой логической операции с операндом NULL в любой РСУБД.
И аналогично NULL является результатом вообще любой операции с операндом NULL в вообще любой РСУБД (кроме, конечно, проверок на NULL).
Единственное исключение - это именно строковые типы именно в Оракле. Что со стороны Оракла кажется мне нелогичным и ошибочным.
vadiminfo
Все еще допускаю, что ее там нет тока от того, что "Иначе она была бы неопределенностью, которая есть возможность любого значение из этого множества", но и была бы чем угодно. Т.е. какую бы личину она не приняла, ее, скорей всего, там бы не было.
Именно это я и утверждал.
vadiminfo
В любом случае та неопределенность, "которая есть возможность любого значение из этого множества" похожа на переменную, на которую таки можно делить, если она не равна 0. Вы знаете, что индоевропейские языки многозначны?..
Рассуждения о философском смысле числа 0 и индоевропейских языках предлагаю отставить в сторону. Возможно, я увлекся. Но и не только я. ;)
В любом случае - понятия NULL в смысле "значение не определено" нет в явном виде ни в арифметике, ни в операциях над строками в программировании на большинстве универсальных языков. Это понятие есть в SQL с его процедурными расширениями.
А вот "пустая строка" есть практически везде, и отнюдь не в смысле "значение не определено", а в смысле "строка, не содержащая символов, т.е. пустая". Кроме Оракла, конечно. Т.е. тут ('' в смысле "значение не определено") Оракл выбивается не только из ряда РСУБД, но и из ряда практически всех остальных систем программирования, что выглядит по меньшей мере странно.
vadiminfo
Favn
И любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен.
Вы сначало расширте множество неопределенностью, потом определите опреации, чтобы все это было видно, а потом доказывайте это утверждение.
При чем тут теория множеств?
Мы рассматриваем NULL в контексте РСУБД. Для них не надо расширять множества и определять операции - все давно определено стандартом, а вовсе не мной.
14 июл 10, 19:15    [9105463]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
Favn

В любом случае, SQLJ ни в одной СУБД не выполняется JVM, которая об SQL вообще ничего не знает и знать не должна.

товарищ, ну путаем теплое с мягким:
IBM
The SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source. The translator converts SQLJ clauses to standard Java statements by replacing the embedded SQL statements with calls to the SQLJ run-time library.

http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.sqlj.doc/topics/csqlj.html

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

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


шиза а том, что в одной процедуре процедурная часть которая транслируется в "standard Java source file" интепретирует нулл по одному, а декларативный embedded SQL совершенно по другому.
14 июл 10, 19:17    [9105467]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Favn
Member

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

PS. Так что там с валидацией статики SQLJ в Оракле?
14 июл 10, 19:42    [9105548]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
Favn
А на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)
Ошибкой является несоответствие документации, а не логике отдельных людей. В данном случае я вижу, что поведение пустой строки для присваивания переменной char документации не очень соответствует, а значит это - ошибка.
Понятно, что работа Oracle с null не согласуется со стандартом SQL. Честно говоря, мне на стандарт плевать. Проблемы возникнут при разработке кроссплатформенных решений, которыми я постараюсь никогда не заниматься совсем по другим причинам. Точно также меня не задевает и работа с null в других СУБД, хотя лишнее nvl писать иногда надоедает.
14 июл 10, 21:43    [9105875]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Yo.!
Guest
Favn

IBM
The SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source.
Файл с SQLJ не является standard Java source file - директивы #sql не могут быть правильно обработаны стандартным компилятором Java.

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

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

да, впечатляет. куда там оракловому syntax shugar написанному с нуля и являющемся частью ядра

ЗЫ. теперь надеюсь ясно "Какой-такой декларативный SQL в Java процедуре?"
14 июл 10, 21:43    [9105877]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
vadiminfo
null и пустая строка существуют тока в компьютерном типа мире, а факты реального описываются знаками отличными от null и пустая строка.
Вот, возможно, Надо же все варианты учитывать, а не тока первые пришедшие в голову.

Вадим, еще раз сорри за занудство, но в реальном мире факты НЕ_ВСЕГДА описываются теми знаками, которые укладывались бы в типа Вашу теорию. Вариантов значения строк, отличных от null и пустой строки, первых пришедших в мне голову, у меня очень много. :) Коли Вы, как разработчик, не смогли наложить на значения этих переменных разумные ограничения, то все они - ФАКТЫ! В компьютерном мире РМД, наверное и в Вашем...
14 июл 10, 22:19    [9105976]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
ЛП
Ну, как тут написали, null записывается не только в поле типа varchar (при попытке записи ''), но так же и в поле типа int.
А в поле типа char - нет, не записывается null
Бездна логики (с)

Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?
Если '' не эквивалентно null (несмотря на все здешние убеждения), то почему оно вообще позволяет записать себя в int?
Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена". Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты.
14 июл 10, 22:29    [9106005]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
web_fox
Member

Откуда: Киев
Сообщений: 444
О боги! Откуда вы это всё придумали??? Из MMX-инструкций, устройства FPU?
Какое ещё множество какой такой неопределённостью расширить?
NULL - это просто флаг(!), который говорит, что значения нет. Как я уже сказал, фактически это отдельное(!) свойство, а не отдельное значение. Это, если хотите, атавизм синтаксиса современного SQL, потому что синтаксически присваивается по значению как обычное значение, хотя реально является отдельным самостоятельным свойством, например: !Apple.isNull() ? Apple.GetColor() : RaiseException().
По правильному любые операции с NULL должны приводить к исключению. Если ваша программа дошла до умножения или сложения чего-то с тем, чего не существует - это ошибка при реализации бизнес-логики, это как в сях записать что-то в память по неинициализированному указателю, просто ошибка.

Не надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Всё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк.
14 июл 10, 22:35    [9106018]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
dbms_photoshop
Но черт возьми смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец! Не проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах.
На мой взгляд - не проще. А точнее, вообще трудновыполнимо.
dbms_photoshop
Чем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски.
Нет ничего идиотского, налицо отступление от стандартов, которое, возможно, чревато (а возможно и оправданно)... В любимой СУБД может не быть FROM... тоже обсуждаемо...
14 июл 10, 22:44    [9106043]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
web_fox
О боги! Откуда вы это всё придумали??? [..] 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно.
Но есть вопросы - он флаг в дополнение к значению или вместо? Т.е. ''(varchar) и флаг null? или вместо ''(varchar) - null?
А когда в поле "адрес" у бомжа - '', это <значения нет - для примитивов> или <объект не инициализирован - для объектов>?..

web_fox
Всё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк.

Да не, тут больше интересуют вопросы интерпретиции null.
Вот если вынести "адреса граждан" в отдельное отношение, то совершенно справедливо можно наложить ограничение not null and != '' в поле "адрес", т.е. либо у человека адрес имеется и будь добр его заведи, либо адреса нет, тогда и записи не будет, и соединение (композиция) даст null в адресе. Это, говоря Вашими словами, прозрачно и понятно. А без этого - флаги "чего-то", что они значат - надо еще разбираться...
14 июл 10, 23:28    [9106161]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
web_fox
Не надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно.
Эх, где же вы были, когда стандарты пИсали...
Булгаков. Собачье сердце
---~Да не согласен я.

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

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

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

---~Да что тут предлагать?.. А то пишут, пишут... Конгресс, немцы
какие-то... Голова пухнет. Взять все, да и поделить...
14 июл 10, 23:32    [9106167]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
ЛП
Guest
2 Sgt.Pepper
Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена".

Конечно. А что в этом плохого?
Как прозвучало "как же логично Он устроен", так с тех пор спокойно и мусолим бездну логики :)

Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты.

Нравится Пушкин - ваше право.
Можете даже других агитировать.
Но аргументы тщательнЕе надо подбирать :)
14 июл 10, 23:40    [9106181]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
vadiminfo
Зачем же 0 непременно отсутсвие значения, а не значение? Если под отсутсвием значение понимать, что нет даже нуля, то этого в арифметике нет, а 0 там есть. Значит они разные?
Безусловно.
Еще вот какое соображение. Пользовательские интерфейсы обычно при редактировании строки (без выбора из списка) легко дают возможность юзеру изменить null на '', но не наоборот, т.е. с известной долей погрешности можно рассматривать null в адресе гражданина как "неинициализированное, неизвестное значение", а '' как "осмысленное пустое (отсутствующее при декомпозиции)". Что скажете - эта информация в каких-либо случаях заслуживает того, чтобы не быть потерянной?
14 июл 10, 23:53    [9106211]     Ответить | Цитировать Сообщить модератору
 Re: Все таки Oracle впереди планеты всей!  [new]
Sgt.Pepper
Member

Откуда: spb
Сообщений: 1166
ЛП
Нравится Пушкин - ваше право.
Можете даже других агитировать.
Но аргументы тщательнЕе надо подбирать :)

Над этим мне еще много работать :)
14 июл 10, 23:56    [9106217]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 13 [14] 15 16 17   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить