SSIS ScriptTask SQLBulkCopy Oracle Clob - несколько столбцов в один локальный столбец - PullRequest
1 голос
/ 26 марта 2019

У нас есть набор таблиц, которые мы можем быстро получить из Oracle, разбив Clob на 4 куска.Я подозреваю, что пользовательский iDataReader выглядит примерно так:
SqlBulkCopy ColumnMapping несколько столбцов
необходимо.Я изо всех сил пытаюсь, как взять части clob из хранилища данных и соединить их вместе в локальное поле varchar (max), в то же время обрабатывая другие столбцы в обычном режиме.У меня есть путь ветвления, потому что не во всех таблицах есть такое поле, и он может быть быстро обработан другим путем.

Мы испробовали множество способов, в том числе пытаясь вытянуть его непосредственно, присоединяясь к стороне оракула после измельчения.и т. д. это, кажется, БЫСТРЫЙ способ получения данных.
(по крайней мере, на порядок или величину)

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, .
  }
}

столбцы столбца:

NVL(CAST(substr(DESCRLONG, 1, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART1,  
NVL(CAST(substr(DESCRLONG, 4001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART2,  
NVL(CAST(substr(DESCRLONG, 8001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART3,  
NVL(CAST(substr(DESCRLONG, 12001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART4,  
NVL(CAST(substr(DESCRLONG, 16001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART5,  
NVL(CAST(substr(DESCRLONG, 20001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART6,  
NVL(CAST(substr(DESCRLONG, 24001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART7,  
NVL(CAST(substr(DESCRLONG, 28001, 4000) as VARCHAR2(4000)), ' ') AS CLOBPART8  

Локальное поле в этом случае - DESCRLONG, но может отличаться, но CLOBPARTS распространены и передаются varchar (max).Показанный путь не-CLOB, кажется, хорошо работает в зависимости от порядкового положения.Очевидно, что это не совсем сработает со многими к одному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...