2015-01-19 1 views
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(); 
+2

작동하지 않는 기능에 대해 자세히 설명해 줄 수 있습니까? 오류 메시지? – Dawnkeeper

+0

배열 바인딩은 SQL DML (INSERT, UPDATE, DELETE)에 대한 것이라고 생각합니다. PL/SQL 코드 블록에 대한 바인드를 배열하려고 시도하고 있습니다. BEGIN 및 END를 제거하고 명령에 UPDATE 만 남기십시오. –

+0

@KimBergHansen, 나는 그것이 문제라고 생각하지 않는다. 내 응용 프로그램에서 나는 BEGIN 및 END도 제거한 PL/SQL 프로 시저 –

답변