Как преобразовать SQL Server NVARCHAR(3000) в Oracle NCHAR

#sql #sql-server #oracle #plsql #type-conversion

#sql #sql-сервер #Oracle #plsql #преобразование типов

Вопрос:

Мне нужно запрашивать таблицы в SQL Server у Oracle через ссылки на базу данных. В одной из таблиц SQL Server, которые мне нужно запросить, есть NVARCHAR столбец с максимальной длиной 3000 символов. Oracle рассматривает это как LONG тип данных, поэтому попытка использовать TO_NCHAR , чтобы я мог прочитать значения, возвращает следующую ошибку:

ORA-00932: несовместимые типы данных: ожидаемый NCHAR получил NLONG

Есть ли способ в Oracle, используя SQL или PL / SQL, получить значение или не более первых 2000 символов из NVARCHAR(3000) столбца?

Комментарии:

1. Почему LONG, а не CLOB?

2. Я сделал это сегодня утром, используя TO_NCLOB, но получил следующую ошибку: ORA-22992: невозможно использовать локаторы объектов, выбранные из удаленных таблиц

3. попробуйте использовать CAST(column_name КАК NVARCHAR2(3000))

4. К сожалению, как только Oracle помечает значение как LONG, вы мало что можете с ним сделать. Вы можете преобразовать LONG (NLONG) в CLOB (NCLOB), что было бы намного лучше, но только как часть инструкции INSERT .

5. выполните миграцию с использованием 12c — он поддерживает 32k VARCHAR2 — и не используйте NVARCHAR2 — просто установите для своей базы данных UTF-8 или эквивалент, и вы получите поддержку unicode по умолчанию

Ответ №1:

Если вам нужно объявить строку переменной длины, вы должны указать максимальную длину этой строки. Например, тип данных VARCHAR2. Следующий пример иллюстрирует объявление и использование некоторых строковых переменных:

 DECLARE
name varchar2(20);