我们在虚拟机上有一个SSIS包(假设这是VM1),在这里我们从Oracle中提取数据。该列的Oracle中的数据类型是Varchar2,而在SSIS中,它以DT_WSTR数据类型拉出数据,并将数据存储为NVarchar列。当我从不同的虚拟机打开相同的包(假设这是VM2)时,SSIS包作为DT_STR数据类型拉出,并且由于SSIS包验证阶段的转换错误,该包失败了。当我单击Oracle源SSIS包的数据流任务中的列时,还会收到一个警告。
警告-无法从OLE DB提供程序检索列代码页信息。如果组件支持"DefaultCodePage“属性,则将使用该属性中的代码页。如果当前字符串代码页值不正确,则更改属性的值。如果组件不支持该属性,则将使用组件区域设置ID中的代码页。
我们在VM1和VM2上安装了Oracle (JDK)和Oracle。我们的VM上的操作系统是Windows 7,而SSIS包在这两个VM上都是Visual 2013。
发布于 2020-01-24 17:52:20
我不得不处理Oracle和SSIS之间类似的数据类型问题。由于SSIS对数据类型如此挑剔,我不得不在Oracle端找到一个实现的解决方案。
在我解释我的答案之前,我应该提到,我使用的是Microsoft的Oracle的。我强烈建议在默认连接Microsoft和Oracle提供的情况下使用这些连接器。
因此,尽管如此,我发现了两种技术,似乎可以用正确的编码方式将数据拉到一边。SSIS在从Oracle读取和转换元数据方面确实很差,但是显式地将CASTing转换为VARCHAR2 (即使该列已经是VARCHAR2 )似乎足够表明SSIS知道该列将是DT_STR类型。在我的所有Oracle任务中,我使用的是SQL,而不仅仅是选择表(这是一种最佳做法),这允许我将强制转换添加到查询中。对于VARCHAR2专栏,我会这样做:
SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1
这通常就足够了。但有时情况并非如此,因为Oracle允许在VARCHAR2列中出现一些奇怪的字符。即使在将列解释为[Oracle Source [2345]] Error: OCI error encountered. ORA-29275: partial multibyte character
之后也会看到错误CASTing,这是由于代码页错配造成的。要更正它,可以转换字符串的字符编码,如下所示:
SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1
AL32UTF8
是WE8MSWIN1252
使用的默认(Unicode)编码,WE8MSWIN1252
是Windows系统使用的默认编码(ASCII 1252)。
https://stackoverflow.com/questions/59865117
复制相似问题