PL / SQL CLOB в хранилище данных Snowflake VARCHAR - PullRequest
0 голосов
/ 12 ноября 2018

Я работаю с базой данных Oracle 12c, которая имеет поле длинных символов (CLOB).Он должен быть загружен в хранилище данных Snowflake, которое не имеет эквивалента CLOB (оно просто имеет VARCHAR, который будет использоваться для всех строковых полей).

Несмотря на то, что мы можем просто КАСТИТЬ столбец CLOB в VARCHAR2, он содержит значения длиннее 4000 символов, что, конечно, возвращает ошибку, что значение слишком длинное для его типа данных.

Iискал альтернативы использованию CAST и нашел другие методы.Пример:

select dbms_lob.substr(ha.log,8000,1) log
from ha

Когда я выполняю это через Oracle SQL Developer, он возвращает результаты, как и ожидалось.Однако при попытке загрузки в хранилище данных Snowflake с помощью нашего приложения ETL (которое использует тонкий драйвер Oracle JDBC, 12.2.0.1) Oracle возвращает следующие ошибки:

ORA-06502: PL / SQL: числовойили ошибка значения: слишком маленький буфер символьной строки
ORA-06512: в строке 1

Мне не удалось найти причину, но я нашел еще одно решение, которое состоит в том, чтобы разбить CLOB на такие части, кактак:

SELECT TO_CHAR(SUBSTR(ha.log,0,3999)) log
FROM ha

И это возвращает еще одну ошибку:

ORA-64203: буфер назначения слишком мал для хранения данных CLOB после преобразования набора символов.

Эта ошибка кажетсячтобы указать, что пункт назначения не может сохранить значение из-за его слишком большого размера, но это не должно иметь место.Поля Snowflake VARCHAR могут хранить очень большие объемы данных (аналогично VARCHAR (MAX) в SQL Server).

Я подозреваю, что в драйвере JDBC могут быть некоторые параметры, относящиеся к размеру буфера, которые необходимо настроить, ноЯ не знаком с тем, как это сделать.Любая помощь будет принята с благодарностью.

...