Attunity v. 2.0 使用 SSIS 2012 和 Microsoft SSIS Connector for Oracle。
当我为特定表添加 Oracle 源时,它将 Oracle CHAR(1) 字段的数据类型设置为 DT_WSTR。
我已经阅读了文档并搜索了网络,我希望 Oracle CHAR(1) 是 DT_STR 而不是 DT_WSTR。
有谁知道为什么会这样?
此外,当我尝试将我的 Oracle 源中的数据类型设置为列的 DT_STR 时,该设置似乎不成立。
任何人都遇到过这种情况,您对如何解决它有什么建议吗?
我相信我已经弄清楚了,但是如果有人有更好的文档或专业知识,请发布单独的答案,我会投票并接受它。
我发现,Oracle PL/SQL 在声明字符数据类型时,有一种方法可以在 PL/SQL 中表达“字节语义”和“字符语义”的概念。
请参阅此Oracle 文档网页中的字符数据类型的长度语义标题,其中指出:
在查看我的 Oracle 源数据库时,我现在注意到已作为 DT_WSTR 导入的字段实际上是使用 PL/SQL 语法声明的
xxxCHAR(n CHAR)
——其中第二个“CHAR”明确说明了字符语义——而不是默认字节语义。因此,在我的 Oracle 数据库中,我相信我需要将具有数据库数据类型的列
CHAR(1 CHAR)
视为使用字符语义的字符数据类型,并且我相信这意味着该字段可以容纳 1 个字符,而不管使用的字符集的字节长度如何.鉴于上述情况,SSIS(通过 Attunity 的 Microsoft Oracle 连接器)会将非 NCHAR/NVARCHAR 数据类型提升为 DT_WSTR(而不是 DT_STR)。
并且,按照上述内容,在导入使用字符语义表示的列时,我将需要 NCHAR 和 NVARCHAR SQL Server 数据库数据类型。
一旦我这样做了,我将不再需要在我的 SSIS 数据流中将 DT_WSTR 数据类型转换为 DT_STR(这变得非常乏味)。
请注意,我已经将 NCHAR 和 NVARCHAR 用于在 Oracle 端声明为这样的字段 - 期望在 SQL Server 端为这些类型提供适当的存储。
更新:这是docs.oracle.com 网页,显示了我描述的语法如下: