0
Oracle에서 C#을 사용하여 대량 레코드 업데이트를 수행해야하는 경우가 있습니다. 오라클로 다시 업데이트해야하는 레코드 ID의 배열을 전달하여이 작업을 수행하려고하는데 코드가 작동하지 않습니다.Oracle : C#에서 레코드 대량 업데이트
나는 단순히 업데이트 문
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, 나는 그것이 문제라고 생각하지 않는다. 내 응용 프로그램에서 나는 BEGIN 및 END도 제거한 PL/SQL 프로 시저 –