Мне нужно написать компонент, который воссоздает таблицы 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?