PL / SQL CLOB到Snowflake数据仓库VARCHAR

时间:2018-11-12 18:34:51

标签: oracle plsql oracle12c clob snowflake-datawarehouse

我正在使用具有长字符(CLOB)字段的Oracle 12c数据库。需要将其加载到Snowflake数据仓库中,该仓库不具有CLOB等效项(它只是将VARCHAR用于所有字符串字段)。

虽然我们可以将CLOB列正确地转换为VARCHAR2,但它包含的值超过4000个字符,这当然会返回一个错误,即该值对于其数据类型而言太长。

我搜索了使用CAST的替代方法,并找到了其他方法。示例:

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

当我通过Oracle SQL Developer执行该操作时,它将返回预期的结果。但是,当尝试使用我们的ETL应用程序(使用Oracle JDBC Thin驱动程序12.2.0.1)加载到Snowflake数据仓库时,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字段可以存储大量数据(类似于SQL Server中的VARCHAR(MAX))。

我怀疑JDBC驱动程序中可能有一些与缓冲区大小相关的设置需要调整,但是对此却不熟悉。任何帮助将不胜感激。

0 个答案:

没有答案