티스토리 뷰

.Net의 System.Data.OracleClient 를 이용하여 데이터를 select 하던 중 delete 문을 처리하면 오류가 생길까?


하나의 OracleConnection, OracleCommand, OracleDataReader 객체를 하나만 이용해서 처리했기 때문에 오류가 생길 것이라고 생각했었는데 테스트 해보니 문제가 없다. ㅎ


일단 테스트해본 row는 5000 row 인데 처리하는데 문제가 없는 것으로 보아 ExecuteReader() 명령이 한번에 5000개의 데이터를 다 가져와서 그렇거나, OracleCommand 객체를 이용하여 새로운 쿼리를 날리면 다른 세션을 생성해서 그런게 같다. 


그리고 MSDN 예제에도 이런식으로 처리하는 예제가 있는 것으로 보아(같은 방식은 아니지만) 그냥 이용해도 괜찮은것 같다. 


내가 테스트한 코드는 다음과 같다.


string oradb = ConfigurationManager.ConnectionStrings["stxdev"].ConnectionString;

using (OracleConnection conn = new OracleConnection(oradb))
{
	conn.Open();

	using (OracleCommand cmd = new OracleCommand())
	{
	    cmd.Connection = conn;
	    cmd.CommandText = "SELECT vch1, vch2 FROM xxmsc.xxmsc_temptable";

	    // 처리정보 select
	    using (OracleDataReader reader = cmd.ExecuteReader())
	    {
		while (reader.Read())
		{
		    string vch1 = reader["vch1"].ToString();
		    string vch2 = reader["vch2"].ToString();
		    // 처리중 delete 처리
		    cmd.Connection = conn;
		    cmd.Transaction = conn.BeginTransaction();
		    cmd.CommandText = "DELETE FROM xxmsc.xxmsc_temptable WHERE vch1='" + vch1 + "' and vch2 = '" + vch2 + "'";
		    cmd.ExecuteNonQuery();
		    cmd.Transaction.Commit();
		}
	    }
	}
}


반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함