【问题标题】:Oracle query as source in SSIS defines wrong data typesOracle 查询作为 SSIS 中的源定义了错误的数据类型
【发布时间】:2011-01-13 14:56:33
【问题描述】:

我有一个有点复杂的查询,我想将它用作 SSIS 包中的源。我创建了我的 OLE DB 源,将访问模式指定为 SQL,并将我的查询粘贴到命令文本框中。当我点击预览时,样本数据回来了,一切看起来都很好。

但是,当我尝试运行该程序包时,我得到了“外部列与数据源列不同步”以及“需要从外部列中删除外部列 'xxx'”的错误消息。请注意,在设计模式下,错误列表选项卡中没有条目。

在进行研究时,我发现外部、输出和错误列被自动定义为错误的数据类型。一些明显的整数列被定义为字符串,而另一些则被设置为 unicode 字符串。

我尝试通过高级编辑器手动修复它们,但您似乎无法更改错误列。但是,如果我修复了外部和输出源列,我会收到关于不同步的消息……你想修复它吗?我点击是,它把它放回字符串......

感谢您的任何见解。

【问题讨论】:

    标签: oracle ssis ssis-data-types


    【解决方案1】:

    您遇到的问题可以通过多种方法之一来解决。

    首先,如果您尝试使用高级编辑器来更改此设置(我不建议这样做,因为维护人员很难看到您所做的事情),您必须更改外部和输出源列的设置同步。单击“是”时,“修复”是两者之间的不匹配。

    其次,您可以将它们全部保留为字符串,并使用数据转换组件转换为您需要的类型。这对未来的维护者来说更容易。

    我更喜欢使用 oracle sql 语句在 pl/sql 中设置我需要的类型,以便 SSIS 创建具有正确类型的字段。这允许定义是明确的,因此维护者可以看到做了什么。为此,我使用 sql 查询从目标表的结构构建我的 oracle select 语句(在我构建它的项目中,我们在应用转换之前将所有数据/结构完整地从 Oracle 带入暂存 Sql Server 机器.)
    https://docs.google.com/leaf?id=0B4aVrSS2ke2IZGVkYWJkOWYtY2Y3Yy00MDI5LTkyMDctYjgwMGY2YzZiODRm&hl=en

    【讨论】:

    • 我正在更改外部列和输出列中的数据类型。而且我仍然收到修复不匹配提示。也许我错过了一些东西......会再看一遍。由于编辑器不允许,如何更改错误列属性。将其保留为字符串不是答案,因为包不会使用自动生成的类型运行。
    • 我查看了您的 Oracle Select Builder。你在 Sql Server 端运行它?我想我将生成的 SELECT 语句用于 Oracle Source 组件,然后使用脚本组件(或表达式变量)和变量来设置运行时语句。
    • 我从未更改错误列上的类型,这些类型是由 ssis 生成的,不是数据移动的一部分。我将再次查看并验证当我这样做时我更改了哪些。不过,我不建议在高级编辑器中更改它们。我在 SQL 端运行的 Oracle Select 构建器为我从 Oracle 提取的每个表生成要在 OLEDB 源组件中使用的 sql 语句。 sql语句读取本地sql表的表结构,生成pl/sql供oracle拉取正确格式的数据。
    • 我对这个答案的总体看法是,您应该在 pl/sql 中强制转换或转换,以便当它拉入数据流时,类型是 ssis 端所需的格式。让 Oracle 做转换工作,这样您就不必使用高级编辑器,也不必使用数据转换组件。
    • 谢谢。我使用了您回复的修改版本。正如建议的那样,我在那里使用了双重查询,使用强制转换/转换来确保我得到正确的数据类型。我使用包变量来保存开发查询,然后使用脚本任务将变量更新为我的运行时查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多