Как разрешить пробелы в атрибуте, назначенном в качестве первичного ключа? - PullRequest
0 голосов
/ 28 марта 2012

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

Есть ли способ вставить пробелы в атрибут первичного ключа?

Спасибозаранее!

1 Ответ

1 голос
/ 28 марта 2012

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

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

Или, если ключ основан на числах, то, если вы не используете прямую опцию SQL * Loader, вы можете добавить в эту таблицу триггер при вставке, который проверяет нулевое значение в этом поле и устанавливает его в значение, если оно равно нулю. Последовательности часто используются для этого, но в вашем случае вам нужно будет проверить наличие коллизий с существующими значениями ключа (например, создать последовательность, которая начинается в диапазоне, намного превышающем любое значение из источника данных). Тем не менее, это риск того, что вы можете столкнуться с будущими коллизиями, если исходная система в конечном итоге продублирует созданный вами ключ, и это лишит вас возможности отследить запись от цели назад к источнику на основе идентификатора.

...