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