Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SSIS for Oracle source中将DT_STR默认更改为DT_WSTR_Sql Server_Oracle_Ssis - Fatal编程技术网

Sql server 如何在SSIS for Oracle source中将DT_STR默认更改为DT_WSTR

Sql server 如何在SSIS for Oracle source中将DT_STR默认更改为DT_WSTR,sql-server,oracle,ssis,Sql Server,Oracle,Ssis,我们的虚拟机上有一个SSIS包(假设为VM1),我们从Oracle源中提取数据。Oracle中该列的数据类型是Varchar2,在SSIS中,它作为DT_WSTR数据类型进行拉取,并将数据存储为NVarchar列。 当我从不同的虚拟机(假设为VM2)打开同一个包时,SSIS包将作为DT_STR数据类型拉取,并且由于SSIS包验证阶段的转换错误,该包将失败。当我单击Oracle源SSIS包的数据流任务中的列时,我还会收到一条警告,粘贴在下面 警告-无法从OLE DB检索列代码页信息 供应商。如果组

我们的虚拟机上有一个SSIS包(假设为VM1),我们从Oracle源中提取数据。Oracle中该列的数据类型是Varchar2,在SSIS中,它作为DT_WSTR数据类型进行拉取,并将数据存储为NVarchar列。 当我从不同的虚拟机(假设为VM2)打开同一个包时,SSIS包将作为DT_STR数据类型拉取,并且由于SSIS包验证阶段的转换错误,该包将失败。当我单击Oracle源SSIS包的数据流任务中的列时,我还会收到一条警告,粘贴在下面

警告-无法从OLE DB检索列代码页信息 供应商。如果组件支持“DefaultCodePage”属性, 将使用该属性中的代码页。更改 如果当前字符串代码页值不正确,则返回属性。如果 该组件不支持属性,即 将使用组件的区域设置ID

我们在VM1和VM2上都安装了Oracle Java(JDK)和Oracle客户端。
我们的虚拟机上的操作系统是Windows 7,SSIS包在这两个虚拟机上都是Visual Studio 2013。我不得不处理Oracle和SSIS之间类似的数据类型问题。由于SSI对数据类型非常挑剔,我必须找到一个在Oracle端实现的解决方案

在我解释我的答案之前,我应该提到我使用的是微软的Attunity Connectors for Oracle。我强烈建议在Microsoft和Oracle提供的默认连接上使用这些连接器

因此,尽管如此,我发现了两种技术,它们似乎能够以正确的编码方式将数据拉过来。SSIS在从Oracle系统读取和转换元数据方面非常糟糕,但显式强制转换为VARCHAR2(即使列已经是VARCHAR2)似乎足以暗示SSIS知道该列将是DT_STR类型。在所有Oracle源代码任务中,我都使用SQL命令,而不仅仅是选择表(),这允许我将强制转换添加到查询中。对于VARCHAR2列,我会这样做:

SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1
SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1
这通常就足够了。但有时不会,因为Oracle允许在VARCHAR2列中使用一些奇怪的字符。如果看到错误
[Oracle Source[2345]]错误:遇到OCI错误。ORA-29275:部分多字节字符
即使在将列显式转换为VARCHAR2后,这也是由于代码页不匹配造成的。要更正此错误,您可以如下转换字符串的字符编码:

SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1
SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1

AL32UTF8
是Oracle使用的默认(Unicode)编码,
WE8MSWIN1252
是Windows系统使用的默认(ASCII 1252)编码。

我不得不处理Oracle和SSI之间类似的数据类型问题。由于SSI对数据类型非常挑剔,我必须找到一个在Oracle端实现的解决方案

在我解释我的答案之前,我应该提到我使用的是微软的Attunity Connectors for Oracle。我强烈建议在Microsoft和Oracle提供的默认连接上使用这些连接器

因此,尽管如此,我发现了两种技术,它们似乎能够以正确的编码方式将数据拉过来。SSIS在从Oracle系统读取和转换元数据方面非常糟糕,但显式强制转换为VARCHAR2(即使列已经是VARCHAR2)似乎足以暗示SSIS知道该列将是DT_STR类型。在所有Oracle源代码任务中,我都使用SQL命令,而不仅仅是选择表(),这允许我将强制转换添加到查询中。对于VARCHAR2列,我会这样做:

SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1
SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1
这通常就足够了。但有时不会,因为Oracle允许在VARCHAR2列中使用一些奇怪的字符。如果看到错误
[Oracle Source[2345]]错误:遇到OCI错误。ORA-29275:部分多字节字符
即使在将列显式转换为VARCHAR2后,这也是由于代码页不匹配造成的。要更正此错误,您可以如下转换字符串的字符编码:

SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1
SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1

AL32UTF8
是Oracle使用的默认(Unicode)编码,
WE8MSWIN1252
是Windows系统使用的默认(ASCII 1252)编码。

我已尝试安装“ODAC 12c Release 2和Oracle Developer Tools for Visual Studio(12.1.0.1.2)”,并解决了转换问题。现在,Varchar2被读取为DT_WST,默认代码页的警告消息也被修复。此页面帮助我尝试安装“ODAC 12c Release 2和Oracle Developer Tools for Visual Studio(12.1.0.1.2)”,并修复了转换问题。现在,Varchar2被读取为DT_WST,默认代码页的警告消息也被修复。本页帮助我感谢@digital.aron提供的信息。我已尝试安装“ODAC 12c Release 2和Oracle Developer Tools for Visual Studio(12.1.0.1.2)”,并修复了转换问题。现在,Varchar2被读取为DT_WST,默认代码页的警告消息也被修复。本页帮助我感谢@digital.aron提供的信息。我已尝试安装“ODAC 12c Release 2和Oracle Developer Tools for Visual Studio(12.1.0.1.2)”,并修复了转换问题。现在,Varchar2被读取为DT_WST,默认代码页的警告消息也被修复。这一页帮助了我