【问题标题】:Oracle 12c Number field mapped to DT_WSTR in SSISOracle 12c 数字字段映射到 SSIS 中的 DT_WSTR
【发布时间】:2023-03-12 17:20:01
【问题描述】:

我正在尝试使用 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 源中遇到异常,因此我还没有触及平面文件目标中的任何内容。

【问题讨论】:

    标签: ssis ssis-2012 ssis-2008


    【解决方案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 源和平面文件之间使用数据转换。我的理解正确吗?
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 2012-07-16
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多