Oracle 12c 数字字段映射到 SSIS 中的 DT_WSTR

Posted

技术标签:

【中文标题】Oracle 12c 数字字段映射到 SSIS 中的 DT_WSTR【英文标题】:Oracle 12c Number field mapped to DT_WSTR in SSIS 【发布时间】:2021-08-17 06:19:21 【问题描述】:

我正在尝试使用 Microsoft SSIS 2008 将 Oracle 12c 数据库表中的数据提取到平面文件中。

Oracle 数据库中的表

Create Table Test
(
  Col1 Varchar2(10),
  Col2 NUMBER default 0
)

没有为 Col2 Number 字段指定精度/比例。所以它存储给定的值。

样本值

SSIS 包:

在OLEDB源组件的SSIS包中,我们映射了表,Col2映射为DT_WSTR。如果我要更改为 DT_Numeric,我不确定要在精度和比例中指定什么。由于 Oracle 表中没有提到精度/比例。

编辑:

我在“执行阶段”本身的 OLE DB 源本身中遇到错误, [OLE DB 源1] 错误:输出“OLE DB 源输出”(11) 上的输出列“COL2”(20) 存在错误。 返回的列状态为:“文本被截断或目标代码页中的一个或多个字符不匹配。”。

如果我修改 OLE DB 源的输出列中的数据类型,如下所示,它正在工作,我没有修改外部列和 OLE DB 错误输出列。在这两个地方都是 DT_WSTR。这样可以吗?

而且由于我在 OLE DB 源中遇到异常,因此我还没有触及平面文件目标中的任何内容。

【问题讨论】:

【参考方案1】:

在 Oracle 中,当未明确包含精度/小数位数时,NUMBER 类型默认为浮点数:

https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT313

因此将 DT_WSTR 更改为 DT_R8(双精度浮点)应该是最安全的假设,您可以在高级编辑器中执行此操作:

【讨论】:

非常感谢您的宝贵时间和即时帮助。我在问题的“编辑”部分放置了一些屏幕截图。我在“执行阶段”本身中遇到 OLE DB 源本身的错误,[OLE DB 源 [1]] 错误:输出“OLE DB 源输出”上的输出列“COL2”(20)出现错误( 11)。返回的列状态为:“文本被截断或一个或多个字符在目标代码页中不匹配。”正如你所建议的,它正在工作,如果我将 OLE DB 源的输出列中的数据类型修改为 DT_R8 我没有在外部列和 OLE DB 错误输出列中进行修改。在这两个地方都是 DT_WSTR。这样可以吗。。而且由于我在 OLE DB 源中遇到异常,因此我还没有触及平面文件目标中的任何内容。 您可以随时进行转换,在我的示例中我没有在源代码中进行转换,因为我没有 oracle 连接,但您可以按照编辑部分中的说明进行操作.然后您可能需要重新映射平面文件目标中的字段,它会自行排序,而无需显式更改数据类型。在最坏的情况下,您可以删除并重新创建平面文件目标。 谢谢。我标记了你的答案。在 OLEDB Source 中,我只在 Output 列中更改为 DT_R8,而在 External 列和 OLEDB Source Error Output 中没有更改。那样可以么?我是 SSIS 的新手。这就是再次问这个问题的原因 OLEDB源码高级编辑器,正在做隐式转换。为了避免 OLE DB 源错误,我们只能进行高级编辑器修改。要解决此问题,我们不能在 OLE DB 源和平面文件之间使用数据转换。我的理解正确吗?

以上是关于Oracle 12c 数字字段映射到 SSIS 中的 DT_WSTR的主要内容,如果未能解决你的问题,请参考以下文章

oracle 12c 新特性之不可见字段

安装oracle12c时出现无法检测指定的位置是不是位于cfs上,怎么解决

12c 新特性-隐藏列

oracle12c设置密码复杂度要求

Oracle 12c 用相同的数据更新多行

Oracle 12c 无法识别 JSON 类型