INSERT в таблицу Oracle из ссылки на базу данных SQL Server

Я создал ссылку на базу данных SQL Server 2012 в Oracle 11gR2, используя Oracle Gateway для SQL Server. Соединение работает нормально, и я могу выполнять запросы и хранимые процедуры с SQL Server.

Проблема возникает, когда я пытаюсь получить столбец XML из SQL Server. В документах Oracle четко указано, что если база данных находится в наборе символов UTF (AL32UTF8), XML поддерживается, но в формате типа данных LONG.

Я могу запросить столбец XML с помощью

SET LONG 5000;
select "XMLColumn" FROM "xmltable"@sqlserver;

но при попытке вставить это в таблицу оракула с типом данных Long выдает следующую ошибку.

SQL Error: ORA-00997: illegal use of LONG datatype

Есть ли обходной путь для этой проблемы.

Я даже попытался преобразовать входящий XML в CLOB, как предложил Сандерс, что совершенно логично. Но почему-то это тоже возвращает ту же ошибку. В приведенном ниже запросе Имя, очевидно, представляет собой столбец XML из SQL Server.

CREATE TABLE TEMPCLOB
AS
SELECT TO_LOB("Name") AS "Name" FROM "xmldata"@sqlserver;

person Manoj    schedule 11.12.2014    source источник


Ответы (1)


LONG является устаревшим типом данных в Oracle. Вы можете потратить время на эту проблему, но я бы посоветовал вам немедленно преобразовать ее в CLOB или XMLTYPE и вообще не иметь проблем.

person Sanders the Softwarer    schedule 11.12.2014
comment
Здравствуйте Сандерс, вы правы - LONG устарел. Но проблема здесь в том, что, поскольку тип данных находится в XML на SQL Server, когда мы делаем связанный запрос, Oracle Gateway автоматически преобразует его в LONG. Я просто хочу вставить SQLServer XML в таблицу Oracle (SSIS не поможет, так как мой вариант использования отличается). - person Manoj; 12.12.2014
comment
Как вы сказали, вы можете ВЫБРАТЬ этот XML (преобразованный в LONG), но столкнулись с проблемой при попытке ВСТАВИТЬ его в таблицу. Поэтому я бы попытался преобразовать этот (выбранный) LONG в CLOB или XMLTYPE, а затем вставить этот CLOB/XMLTYPE в таблицу. - person Sanders the Softwarer; 12.12.2014
comment
Даже когда я пытаюсь преобразовать LONG в CLOB или XMLTYPE, возникает та же ошибка. ORA-00997: незаконное использование типа данных LONG. Я не уверен, что происходит. - person Manoj; 12.12.2014