使用SQL查询Oracle创建SSIS包

时间:2018-08-30 12:54:59

标签: sql-server oracle ssis

我已经将它与SQL Server 2012 64位一起使用了!

我正在使用SQL查询Oracle创建SSIS包,并尝试将文件放入平面文件中。我将Oracle OLEDB源和平面文件目标用于输出。一切在本地都可以正常工作,但是当将其放置在服务器上并通过SQL Agent运行时,我总是使Unicode变为非unicode错误!

最新的驱动程序在服务器上,而11g客户端在我的开发计算机上。每个步骤中显示的类型显示为DT-STR。

我有完全相同的源代码写入OLEDB目标。我不想将它们写到表中然后再将它们拉出来只是为了使它起作用。有什么办法吗?而且,请不要“仅添加此内容”答复。

我尝试了数据转换,但得到了相同的结果。请在此处提供详细的答案,并将其更改为此。图片永无伤害。谢谢

1 个答案:

答案 0 :(得分:0)

简短的回答是,您需要转换代码页,而不是数据类型。

长答案如下:

第0步:如果尚未使用它,我强烈建议您切换到使用Attunity连接器,而不要使用库存的Oracle OLEDB连接器。您可以从以下位置从Microsoft下载SQL2012的版本:https://www.microsoft.com/en-us/download/details.aspx?id=29283

步骤1:使用Attunity Oracle Source,您可以将SQL Command指定为数据访问模式,而不仅仅是指向表。

步骤2:您需要确定Oracle服务器正在使用的确切代码页以及SQL服务器正在使用的确切代码页。对于使用UTF-8字符集的Oracle服务器,很可能是AL32UTF8,对于使用默认ANSI-1252字符集的Windows Server,代码页是WE8MSWIN1252

第3步:编写您的plsql查询,并CONVERT编写Oracle端所有列的代码页。确保在Oracle列名称周围使用双引号。它应该看起来像这样:

SELECT
    CONVERT("Data Source Code",'AL32UTF8','WE8MSWIN1252') AS DataSourceCode
    ,CONVERT("Order#",'AL32UTF8','WE8MSWIN1252') AS OrderNumber
    ,CONVERT("Invoice#",'AL32UTF8','WE8MSWIN1252') AS InvoiceNumber
    ,CONVERT("Item#",'AL32UTF8','WE8MSWIN1252') AS ItemNumber
    ,CONVERT("Order Line Type",'AL32UTF8','WE8MSWIN1252') AS OrderLineType
    ,CONVERT("Order Status",'AL32UTF8','WE8MSWIN1252') AS OrderStatus
    ,CONVERT("Order Date",'AL32UTF8','WE8MSWIN1252') AS OrderDate
    ,CONVERT("Invoice Date",'AL32UTF8','WE8MSWIN1252') AS InvoiceDate
    ,CONVERT("Ship To Cust#",'AL32UTF8','WE8MSWIN1252') AS ShipToCustNumber
    ,CONVERT("Billing Account #",'AL32UTF8','WE8MSWIN1252') AS BillingAccountNumber
    ,CONVERT("Sold Qty",'AL32UTF8','WE8MSWIN1252') AS SoldQty
    ,CONVERT("Unit Price",'AL32UTF8','WE8MSWIN1252') AS UnitPrice
    ,CONVERT("Sales Amount",'AL32UTF8','WE8MSWIN1252') AS SalesAmount
    ,CONVERT("Handling Amount",'AL32UTF8','WE8MSWIN1252') AS HandlingAmount
    ,CONVERT("Freight Amount",'AL32UTF8','WE8MSWIN1252') AS FreightAmount
FROM MYORACLEDB.DIGITAL_SALES_FEED
WHERE "Invoice Date" >= TO_DATE('2018/08/01', 'yyyy/mm/dd')

步骤4:在Oracle Source配置窗口中将此查询文本用作SQL command textOracle Source

事实简介:无论您使用AS ColumnName格式如何,Oracle都会以ALL CAPS返回列名称。

第5步(可选):所有列将作为字符串返回。您可能想在数据流中放置一个Data Conversion任务,但是如果您只是将数据转储到平面文件中,则可能不必关心数据转换。我的数据集中有十进制/数字和日期,因此在插入SQL Server之前先进行转换。