在 SSIS 2012 for Oracle CLOB 中转换DT_TEXT



我正在使用SSIS 2012。 我有一个脚本组件,其输出列的类型为 DT_TEXT。 (它是来自网页的 XML。

我有一个使用 OLE DB 的本机 OLD DB\Oracle 提供程序的 OLE DB 目标,该字段的表定义为 CLOB。

此问题似乎类似:SSIS 脚本组件不允许文本流输出。 这似乎给出了一个答案:http://www.rad.pasfu.com/index.php?/archives/35-How-to-Fill-NTEXT-Column-from-Script-Component-SSIS.html

在脚本组件中,我将XML作为字符串获取,文档说它最多可容纳2GB。 我很难将其分配给我的 Output0Buffer (DT_TEXT(。 任何使用 AddBlobData 的尝试都会出错。

  // Output0Buffer.AddRow();
  // Output0Buffer.forecastXML = forecastXML;
  // Output0Buffer.AddBlobData(forecastXML);
  // Output0Buffer.LargeCol.AddBlobData(forecastXML);
  // Output0Buffer.LargeCol.AddBlobData(System.Text.Encoding.UTF8.GetBytes(forecastXML));

这些是我的一些尝试,但没有一个编译。 最后一个给出错误:"Output0Buffer"不包含"LargeCol"的定义,并且找不到接受类型为"Output0Buffer"的第一个参数的扩展方法"LargeCol"(您是否缺少使用指令或程序集引用?

如何将文本流从脚本组件获取到预言机目标?

事实证明,SSIS 脚本组件不允许文本流输出确实有答案,但我必须弄清楚答案中的字段的含义。

我将解释所有部分,以便清楚发生了什么。

脚本组件具有一个名为"输出 0"的输出,其中包含"输出列 forecastXML"。 这些是默认名称,但最后一个除外。 预测XML的数据类型为文本流[DT_TEXT]

在脚本本身中,我有一个名为 forecastXML 的字符串(是的,同名,这使它变得混乱。

用数据填充字符串 forecastXML 后,我可以使用以下行将其分配给 Output0Buffer:

String forecastXML = oResult.XmlResult;
Output0Buffer.AddRow();
Output0Buffer.forecastXML.AddBlobData(System.Text.Encoding.UTF8.GetBytes(forecastXML));

第一行适用于所有数据类型。 因为我正在写 NTEXT,所以需要第二行,而不是直接的作业。 Output0Buffer.forecastXML 是指在我的输出 0 中定义的 NText 数据类型。 最后一个是代码中的字符串。

更清楚的是,与其创建一个字符串,我应该有

Output0Buffer.forecastXML.AddBlobData(System.Text.Encoding.UTF8.GetBytes(oResult.XmlResult));

其中 oResut.XmlResult 是我获取 XML 的调用的结果。 将其分配给字符串是一个额外的、不需要的步骤。

这将转到Oracle CLOB,因此下一步是将该输出带到派生列,并将我的输出预测XML转换为(DT_NTEXT(预测XML。 (我怀疑我正在做一些不必要的类型更改。

然后,我将该字段映射到 OLE DB 目标中的 CLOB 字段。

最新更新