Код: Выделить всё
CREATE TABLE TARGETSCHEMA.JUNK1
(COL1 VARCHAR2(255));
Код: Выделить всё
ORA-39831: Direct path load failed, (MYSCHEMA.TARGETSCHEMA.JUNK1) is not a table. https://docs.oracle.com/error-help/db/ora-39831/
Код: Выделить всё
user id=MySchema;password=MyPassword;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=servername.sys.mycompany.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=mydb_adhoc.mycompany.com)))
Код: Выделить всё
public static void CallingProcedure()
{
string targetTableName = "TARGETSCHEMA.JUNK1";
DataTable UploadDataTable = GetDataTableForTable(targetTableName);
UploadDataTable.Rows.Add("1");
BulkInsert(UploadDataTable, targetTableName);
}
public static DataTable GetDataTableForTable(string tableName)
{
OracleConnection sqlConnection = (OracleConnection)GetConnection();
sqlConnection.Open();
OracleCommand sqlCommand = new OracleCommand
{
Connection = sqlConnection,
CommandText = $"SELECT * FROM {tableName} WHERE 1 = 0",
CommandType = CommandType.Text
};
DataSet dataSet = new DataSet();
using (var sqlDataAdapter = new OracleDataAdapter { SelectCommand = sqlCommand })
{
sqlDataAdapter.Fill(dataSet);
}
DataTable dataTable = dataSet.Tables[0];
dataTable.TableName = tableName;
return dataTable;
}
public static void BulkInsert(DataTable cvrgTypData, string targetTableName)
{
var oracleConnection = (OracleConnection)GetConnection();
oracleConnection.Open();
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(oracleConnection))
{
bulkCopy.DestinationTableName = targetTableName;
bulkCopy.ColumnMappings.Add("COL1", "COL1");
bulkCopy.WriteToServer(cvrgTypData);
}
oracleConnection.Close();
oracleConnection.Dispose();
}
Я ожидал, что BulkCopy Для .DestinationTableName должно быть установлено полное имя таблицы, и чтобы моя схема по умолчанию не добавлялась поверх уже полного имени таблицы, что делало бы ее двойной.
Мы используем Oracle 19. .
Как я могу предотвратить такое поведение?
Подробнее здесь: https://stackoverflow.com/questions/789 ... d-target-t
Мобильная версия