본문 바로가기
프로그래밍 언어/.Net

.Net 의 오라클 커넥션을 이용할 때 select 문 처리중 delete 문을 이용하면 어떻게 될 까?

by hs_seo 2013. 4. 25.

.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();
		}
	    }
	}
}


반응형