powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Все таки Oracle впереди планеты всей!
25 сообщений из 419, страница 14 из 17
Все таки Oracle впереди планеты всей!
    #36741219
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnПонятно, что работает это только для varchar, не для charДаже для полей типа char - пустая строка означает null:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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 об этом не сказано. Есть только общая фраза:
Код: plaintext
1.
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)?Именно, что пишется :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741240
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FavnА что там может получиться? В DB2 SQL и SQL PL исполняются одним процессом, без внешних VM. Естественно, результат тот же.
т.е. в дб2 процедуры на жава конкатенируют так, а sqlpl этак !?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741391
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 нет, а пустая ссылка.
Что в этом такого удивительного?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741452
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!,
Уточню. Для Java SP/UDF используется только один тип драйвера - type 2, работающий через DB2-ного клиента (в отличие от type 4, писаного на самой Java и в клиенте не нуждающегося). При запуске на сервере (локальном коннекте) такой клиент работает напрямую со структурами памяти инстанса DB2.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741560
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyFavnПонятно, что работает это только для varchar, не для charДаже для полей типа char - пустая строка означает null:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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 - что в этой переменной окажется?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741595
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FavnЕстественно, конкатенация в SQL в JDBC и SQLJ выполняется по правилам SQL DB2.
процедурный код сторед процедуры на SQLJ выполняются сторонней жава машиной, которая о принятых в SQL DB2 правилах не в курсе ...
именно это и странно, если не сказать шизофреничненько. если конкатенация идет в процедурном коде процедуры на SQLJ работает так, если в участке декларативного SQL той же процедуры, то этак. а здесь мы рыбу заворачивали (tm)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741614
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛППардон, а если переменной типа char в PL/SQL коде присвоить значение null - что в этой переменной окажется?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
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
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741620
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До кучи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741652
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741653
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Favn
Естественно, неопределенности в самом множестве чисел нет. Иначе она не была бы неопределенностью, которая есть возможность любого значение из этого множества.

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

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

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


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

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

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

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

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

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

ПС
В тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741659
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov AndreyНа мой взгляд, выглядит так, что указанное отличие для CHAR - ошибка, исправлять которую ни у кого нет желания :)А на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741721
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfoВ тексте нет главного(ных) утверждений ради которых все эти рассуждения. Они видимо предпролагаются. Но судя по тексту у меня сомнения на это счет имеются.Это утверждение было в предыдущих постах. Пожалуйста, повторю точнее:
NULL в SQL введен как обозначение неопределенного в данный момент значения. Это следует из получения NULL как результата любой логической операции с операндом NULL в любой РСУБД.
И аналогично NULL является результатом вообще любой операции с операндом NULL в вообще любой РСУБД (кроме, конечно, проверок на NULL).
Единственное исключение - это именно строковые типы именно в Оракле. Что со стороны Оракла кажется мне нелогичным и ошибочным.
vadiminfoВсе еще допускаю, что ее там нет тока от того, что "Иначе она была бы неопределенностью, которая есть возможность любого значение из этого множества", но и была бы чем угодно. Т.е. какую бы личину она не приняла, ее, скорей всего, там бы не было.Именно это я и утверждал.
vadiminfoВ любом случае та неопределенность, "которая есть возможность любого значение из этого множества" похожа на переменную, на которую таки можно делить, если она не равна 0. Вы знаете, что индоевропейские языки многозначны?..Рассуждения о философском смысле числа 0 и индоевропейских языках предлагаю отставить в сторону. Возможно, я увлекся. Но и не только я. ;)
В любом случае - понятия NULL в смысле "значение не определено" нет в явном виде ни в арифметике, ни в операциях над строками в программировании на большинстве универсальных языков. Это понятие есть в SQL с его процедурными расширениями.
А вот "пустая строка" есть практически везде, и отнюдь не в смысле "значение не определено", а в смысле "строка, не содержащая символов, т.е. пустая". Кроме Оракла, конечно. Т.е. тут ('' в смысле "значение не определено") Оракл выбивается не только из ряда РСУБД, но и из ряда практически всех остальных систем программирования, что выглядит по меньшей мере странно.
vadiminfoFavnИ любая операция с неопределенностью, даже строковая, обязана возвращать неопределенность, т.к. ее результат по определению не известен.Вы сначало расширте множество неопределенностью, потом определите опреации, чтобы все это было видно, а потом доказывайте это утверждение.При чем тут теория множеств?
Мы рассматриваем NULL в контексте РСУБД. Для них не надо расширять множества и определять операции - все давно определено стандартом, а вовсе не мной.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741724
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Favn
В любом случае, SQLJ ни в одной СУБД не выполняется JVM, которая об SQL вообще ничего не знает и знать не должна.

товарищ, ну путаем теплое с мягким:
IBMThe SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source. The translator converts SQLJ clauses to standard Java statements by replacing the embedded SQL statements with calls to the SQLJ run-time library.
http://publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/com.ibm.etools.sqlj.doc/topics/csqlj.html

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

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

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

PS. Так что там с валидацией статики SQLJ в Оракле?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741918
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FavnА на мой - выглядит как единственное место, где '' работает как у всех и как по логике должен работать. А вот все остальное - ошибка, исправлять которую... :)Ошибкой является несоответствие документации, а не логике отдельных людей. В данном случае я вижу, что поведение пустой строки для присваивания переменной char документации не очень соответствует, а значит это - ошибка.
Понятно, что работа Oracle с null не согласуется со стандартом SQL. Честно говоря, мне на стандарт плевать. Проблемы возникнут при разработке кроссплатформенных решений, которыми я постараюсь никогда не заниматься совсем по другим причинам. Точно также меня не задевает и работа с null в других СУБД, хотя лишнее nvl писать иногда надоедает.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741919
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Favn
IBMThe SQLJ translator translates an SQLJ source file into a standard Java source file plus an SQLJ serialized profile that encapsulates information about static SQL in the SQLJ source.Файл с SQLJ не является standard Java source file - директивы #sql не могут быть правильно обработаны стандартным компилятором Java.

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

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

ЗЫ. теперь надеюсь ясно "Какой-такой декларативный SQL в Java процедуре?"
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741954
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfonull и пустая строка существуют тока в компьютерном типа мире, а факты реального описываются знаками отличными от null и пустая строка.
Вот, возможно, Надо же все варианты учитывать, а не тока первые пришедшие в голову.
Вадим, еще раз сорри за занудство, но в реальном мире факты НЕ_ВСЕГДА описываются теми знаками, которые укладывались бы в типа Вашу теорию. Вариантов значения строк, отличных от null и пустой строки, первых пришедших в мне голову, у меня очень много. :) Коли Вы, как разработчик, не смогли наложить на значения этих переменных разумные ограничения, то все они - ФАКТЫ! В компьютерном мире РМД, наверное и в Вашем...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741967
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПНу, как тут написали, null записывается не только в поле типа varchar (при попытке записи ''), но так же и в поле типа int.
А в поле типа char - нет, не записывается null
Бездна логики (с)

Если '' эквивалентно null (как тут пытались убедить), то почему оно не пишется как null в столбец char(1)?
Если '' не эквивалентно null (несмотря на все здешние убеждения), то почему оно вообще позволяет записать себя в int?Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена". Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741974
web_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О боги! Откуда вы это всё придумали??? Из MMX-инструкций, устройства FPU?
Какое ещё множество какой такой неопределённостью расширить?
NULL - это просто флаг(!), который говорит, что значения нет. Как я уже сказал, фактически это отдельное(!) свойство, а не отдельное значение. Это, если хотите, атавизм синтаксиса современного SQL, потому что синтаксически присваивается по значению как обычное значение, хотя реально является отдельным самостоятельным свойством, например: !Apple.isNull() ? Apple.GetColor() : RaiseException().
По правильному любые операции с NULL должны приводить к исключению. Если ваша программа дошла до умножения или сложения чего-то с тем, чего не существует - это ошибка при реализации бизнес-логики, это как в сях записать что-то в память по неинициализированному указателю, просто ошибка.

Не надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Всё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк.
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36741987
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopНо черт возьми смотреть как неглупые вроде люди с пеной у рта несколько страниц обсасывают эту тему - это просто капец! Не проще ли выучить тонкости обоих СУБД и поговорить о более интересных вещах. На мой взгляд - не проще. А точнее, вообще трудновыполнимо.
dbms_photoshopЧем демонстрировать свою узколобость тем, что в моей любимой СУБД так, а во всех других сделано по идиотски. Нет ничего идиотского, налицо отступление от стандартов, которое, возможно, чревато (а возможно и оправданно)... В любимой СУБД может не быть FROM... тоже обсуждаемо...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742019
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxО боги! Откуда вы это всё придумали??? [..] 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно. Но есть вопросы - он флаг в дополнение к значению или вместо? Т.е. ''(varchar) и флаг null? или вместо ''(varchar) - null?
А когда в поле "адрес" у бомжа - '', это <значения нет - для примитивов> или <объект не инициализирован - для объектов>?..

web_foxВсё развивается, всё меняется, пока программим так, как реализовано у всех. А разработчики на орекле на "так, как реализовано у всех"+маленький костылёк.
Да не, тут больше интересуют вопросы интерпретиции null.
Вот если вынести "адреса граждан" в отдельное отношение, то совершенно справедливо можно наложить ограничение not null and != '' в поле "адрес", т.е. либо у человека адрес имеется и будь добр его заведи, либо адреса нет, тогда и записи не будет, и соединение (композиция) даст null в адресе. Это, говоря Вашими словами, прозрачно и понятно. А без этого - флаги "чего-то", что они значат - надо еще разбираться...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742022
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
web_foxНе надо выдумывать никакую новую математику и операции по работе с NULL, бесконечностью, полубесконечностью, нечислом, нестрокой и прочим. 0 и '' - это значения. NULL - это флаг, который говорит, что <значения нет - для примитивов> или <объект не инициализирован - для объектов>. Всё прозрачно и понятно.Эх, где же вы были, когда стандарты пИсали...
Булгаков. Собачье сердце---~Да не согласен я.

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

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

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

---~Да что тут предлагать?.. А то пишут, пишут... Конгресс, немцы
какие-то... Голова пухнет. Взять все, да и поделить...
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742026
ЛП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sgt.Pepper
Ну типа спокойно мусолим сомнительный тезис топикстартера о "самом лучшем самолете на все времена".
Конечно. А что в этом плохого?
Как прозвучало "как же логично Он устроен", так с тех пор спокойно и мусолим бездну логики :)

Не то, чтобы этот самолет - дерьмо, а просто и у Александра Сергеича и у Михаил Юрьевича были проблемы с дуэлями, хотя они очень хорошие поэты.
Нравится Пушкин - ваше право.
Можете даже других агитировать.
Но аргументы тщательнЕе надо подбирать :)
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742032
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoЗачем же 0 непременно отсутсвие значения, а не значение? Если под отсутсвием значение понимать, что нет даже нуля, то этого в арифметике нет, а 0 там есть. Значит они разные?Безусловно.
Еще вот какое соображение. Пользовательские интерфейсы обычно при редактировании строки (без выбора из списка) легко дают возможность юзеру изменить null на '', но не наоборот, т.е. с известной долей погрешности можно рассматривать null в адресе гражданина как "неинициализированное, неизвестное значение", а '' как "осмысленное пустое (отсутствующее при декомпозиции)". Что скажете - эта информация в каких-либо случаях заслуживает того, чтобы не быть потерянной?
...
Рейтинг: 0 / 0
Все таки Oracle впереди планеты всей!
    #36742035
Sgt.Pepper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛПНравится Пушкин - ваше право.
Можете даже других агитировать.
Но аргументы тщательнЕе надо подбирать :)
Над этим мне еще много работать :)
...
Рейтинг: 0 / 0
25 сообщений из 419, страница 14 из 17
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Все таки Oracle впереди планеты всей!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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