#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);