Oracle, не различающая пустые указатели и пустые строки?

Я был бы точно так же, как для вывода, который является, может не обязательно быстрее, это будет определенно иметь лучший объем потребляемой памяти. Это вызвано тем, что строка неизменна в.NET и каждый раз, когда Вы меняете струну, Вы создали новый.

14
задан Community 23 May 2017 в 12:17
поделиться

5 ответов

Хорошее демонстрационное видео с объяснением (и ссылкой на диссертацию автора) можно найти по адресу Отображение и визуализация музыкальных коллекций . Этот подход связан с анализом характеристик самой музыки. Другие методы, такие как NetFlix и Amazon, полагаются на рекомендации других пользователей со схожими вкусами, а также на базовую фильтрацию категорий.

s, хранящийся в виде однобайтового столбца, имеет длину 0 (на самом деле 0xFF ). Конечные NULL не сохраняются вообще.

Таким образом, для сохранения значения 'test' , Oracle необходимо сохранить 5 байтов: 04 74 65 73 74 .

Однако, чтобы сохранить как пустую строку, так и NULL , Oracle просто должен установить длину данных на 0 .

Очень разумно, если ваши данные будут храниться на 20 Мб жестких дисках, каждый из которых стоит 5000 долларов .

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

33
ответ дан 1 December 2019 в 07:19
поделиться

Возможно, вы захотите прочитать это длинное и временами забавное обсуждение именно этой темы более двух лет назад на OTN: http://forums.oracle.com/forums/thread .jspa? threadID = 456874 & start = 0 & tstart = 0

С уважением, Роб.

3
ответ дан 1 December 2019 в 07:19
поделиться

Похоже, Oracle сказал, что это поведение может быть изменено в будущем выпуске. Когда и какой выпуск будет, не упоминается.

Если у вас есть доступ к металинку, посмотрите примечание: 1011340.6 (к сожалению, из-за ограничений я не могу скопировать сюда содержимое примечания)

Если у вас нет получите доступ к металинку, затем посмотрите следующее из документации 10g release 2 здесь

0
ответ дан 1 December 2019 в 07:19
поделиться

Вот почему такие умные люди, как Дейт, говорят, что НИКОГДА не следует использовать нули.

(Нет, я должен быть точным. На самом деле это только один из почти сотен

РЕДАКТИРОВАТЬ

Я также хотел ответить на это:

«Заставить VARCHAR делать такое различие сломает тонны кода»

EDIT

1286] Да, и конечно же, нарушение хотя бы духа стандарта заменой «пустой строки» на ноль при каждом обновлении - меньшее зло?

(Примечание: нуль не равен чему-либо, даже самому себе, поэтому после присвоения пустой строки столбцу oracle предоставит вам значение в этом столбце, которое НЕ совпадает со значением, которое вы сказали, что хотите там появиться. Вау.)

1
ответ дан 1 December 2019 в 07:19
поделиться

@ Ян, ответ вам.

Триггеры Oracle могут ссылаться на таблицу, в которой они созданы:

create table t (id number(10) );

create or replace trigger  t_bir before insert  on  t for each row
declare
  l_id t.id%type;
begin
  select id
  into   l_id
  from   t
  where  id = :new.id;
exception
  when no_data_found then 
    null;
end;
/


SQL> insert into t values (20);

1 row is created.


SQL> select * from t;

        ID
----------
        20
0
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: