Я был бы точно так же, как для вывода, который является, может не обязательно быстрее, это будет определенно иметь лучший объем потребляемой памяти. Это вызвано тем, что строка неизменна в.NET и каждый раз, когда Вы меняете струну, Вы создали новый.
Хорошее демонстрационное видео с объяснением (и ссылкой на диссертацию автора) можно найти по адресу Отображение и визуализация музыкальных коллекций . Этот подход связан с анализом характеристик самой музыки. Другие методы, такие как NetFlix и Amazon, полагаются на рекомендации других пользователей со схожими вкусами, а также на базовую фильтрацию категорий.
s, хранящийся в виде однобайтового столбца, имеет длину 0
(на самом деле 0xFF
). Конечные NULL
не сохраняются вообще.
Таким образом, для сохранения значения 'test'
, Oracle
необходимо сохранить 5 байтов: 04 74 65 73 74
.
Однако, чтобы сохранить как пустую строку, так и NULL
, Oracle
просто должен установить длину данных на 0
.
Очень разумно, если ваши данные будут храниться на 20 Мб
жестких дисках, каждый из которых стоит 5000 долларов
.
Позже, когда появились стандарты, это не так. такая хорошая идея, но к тому времени уже было много-много кода, полагающегося на одно и то же NULL
и ''
.
Возможно, вы захотите прочитать это длинное и временами забавное обсуждение именно этой темы более двух лет назад на OTN: http://forums.oracle.com/forums/thread .jspa? threadID = 456874 & start = 0 & tstart = 0
С уважением, Роб.
Похоже, Oracle сказал, что это поведение может быть изменено в будущем выпуске. Когда и какой выпуск будет, не упоминается.
Если у вас есть доступ к металинку, посмотрите примечание: 1011340.6 (к сожалению, из-за ограничений я не могу скопировать сюда содержимое примечания)
Если у вас нет получите доступ к металинку, затем посмотрите следующее из документации 10g release 2 здесь
Вот почему такие умные люди, как Дейт, говорят, что НИКОГДА не следует использовать нули.
(Нет, я должен быть точным. На самом деле это только один из почти сотен
РЕДАКТИРОВАТЬ
Я также хотел ответить на это:
«Заставить VARCHAR делать такое различие сломает тонны кода»
EDIT
1286] Да, и конечно же, нарушение хотя бы духа стандарта заменой «пустой строки» на ноль при каждом обновлении - меньшее зло?
(Примечание: нуль не равен чему-либо, даже самому себе, поэтому после присвоения пустой строки столбцу oracle предоставит вам значение в этом столбце, которое НЕ совпадает со значением, которое вы сказали, что хотите там появиться. Вау.)
@ Ян, ответ вам.
Триггеры 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