У меня есть требование, когда я должен выполнять массовое обновление записей в Oracle с помощью C#. Я пытаюсь достичь этого, передав массив идентификаторов записей, которые нужно обновить до oracle, но код не работает.Oracle: массовое обновление записей из C#
Последний код, который я использовал IS-
List<Int64> listTransId = new List<Int64>();
while (reader.Read())
{
listTransId.Add(Convert.ToInt64(reader["TOLL_TX_SEQ_NUM"]));
}
Int64[] arrTOLL_TX_SEQ_NUM = new Int64[listTransId.Count];
arrTOLL_TX_SEQ_NUM = listTransId.ToArray();
OracleTransaction txn = connection.BeginTransaction(IsolationLevel.ReadCommitted);
OracleCommand updateCmd = new OracleCommand(@" BEGIN UPDATE TOLL_TRANSACTION SET CCH_EXPORT_DATETIME = SYSDATE WHERE TOLL_TX_SEQ_NUM = :TOLL_TX_SEQ_NUM; END;");
updateCmd.CommandType = CommandType.Text;
updateCmd.Connection = connection;
//update Cmd.BindByName = true;
update Cmd.ArrayBindCount = arrTOLL_TX_SEQ_NUM.Length;
OracleParameter TOLL_TX_SEQ_NUM = new OracleParameter("TOLL_TX_SEQ_NUM", OracleDbType.Int64);
TOLL_TX_SEQ_NUM.Direction = ParameterDirection.Input;
TOLL_TX_SEQ_NUM.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
TOLL_TX_SEQ_NUM.Value = arrTOLL_TX_SEQ_NUM;
TOLL_TX_SEQ_NUM.Size = arrTOLL_TX_SEQ_NUM.Length;
updateCmd.Parameters.Add(TOLL_TX_SEQ_NUM);
Console.WriteLine("Connection state - " + connection.State);
updateCmd.ExecuteNonQuery();
txn.Commit();
connection.Close();
Можете ли вы уточнить, что не работает? Сообщения об ошибках? – Dawnkeeper
Я думаю, привязка массива для SQL DML (INSERT, UPDATE, DELETE). Вы пытаетесь привязать массив к коду блока PL/SQL. Попробуйте удалить BEGIN и END и оставить команду UPDATE в команде. –
@ KimBergHansen, я не думаю, что это проблема. В моем приложении я использую массовые параметры десятков раз при вызове процедуры PL/SQL –