Oracle считает пустые строки NULL, а SQL Server нет - как это лучше всего обрабатывать? - PullRequest
20 голосов
/ 02 октября 2008

Мне нужно написать компонент, который воссоздает таблицы SQL Server (структуру и данные) в базе данных Oracle. Этот компонент также должен принимать новые данные, введенные в базу данных Oracle, и копировать их обратно в SQL Server.

Перевод типов данных из SQL Server в Oracle не является проблемой. Однако критическое различие между Oracle и SQL Server вызывает серьезную головную боль. SQL Server считает, что пустая строка ("") отличается от значения NULL, поэтому столбец char можно определить как NOT NULL, но при этом все еще включать в данные пустые строки.

Oracle считает пустую строку такой же, как значение NULL, поэтому, если столбец char определен как NOT NULL, вы не можете вставить пустую строку. Это приводит к тому, что мой компонент ломается всякий раз, когда столбец NOT NULL char содержит пустую строку в исходных данных SQL Server.

До сих пор моим решением было не использовать NOT NULL ни в одном из моих зеркальных определений таблиц Oracle, но мне нужно более надежное решение. Это должно быть решение кода, поэтому ответом не может быть «использовать такой-то продукт SQL2Oracle».

Как бы вы решили эту проблему?

Редактировать: вот единственное решение, которое я нашел до сих пор, и оно может помочь проиллюстрировать проблему. Поскольку Oracle не допускает "" в столбце NOT NULL, мой компонент может перехватить любое такое значение, поступающее от SQL Server, и заменить его на "@" (например, только).

Когда я добавляю новую запись в свою таблицу Oracle, мой код должен написать «@», если я действительно хочу вставить «», а когда мой код копирует новую строку обратно в SQL Server, он должен перехватить "@" и вместо этого напишите "".

Я надеюсь, что есть более элегантный способ.

Редактировать 2: Возможно ли, что есть более простое решение, например, некоторые настройки в Oracle, которые заставляют его обрабатывать пустые строки так же, как и все другие основные базы данных? И будет ли этот параметр также доступен в Oracle Lite?

Ответы [ 11 ]

0 голосов
/ 28 января 2015

Я недавно объяснил, как Oracle обрабатывает нулевые значения в моем блоге. Проверьте это здесь: http://www.psinke.nl/blog/hello-world/ и дайте мне знать, если у вас есть еще вопросы. Если у вас есть данные из источника с пустыми значениями, и вы должны преобразовать их в базу данных Oracle, где столбцы НЕ ПУСТО (NULL), вы можете сделать 2 вещи:

  • убрать ненулевое ограничение из столбца Oracle
  • Проверьте для каждого отдельного столбца, допустимо ли указывать в столбце '' или 0 или фиктивную дату, чтобы иметь возможность сохранять ваши данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...