I have to clear certain tables in the oracle database however when I'm having issues with running the following code
public static void ClearDataTables(IList<string> tableNames)
{
string connectionString = "CONNECTIONSTRING";
using (OracleConnection connection = new OracleConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
foreach (string table in tableNames)
{
OracleCommand command = connection.CreateCommand();
string sql = String.Format("DELETE FROM TOA_REPORTING.{0}", table);
command.CommandText = sql;
command.ExecuteNonQuery();
}
connection.Close();
}
}
I am calling this method with this list
ClearDataTables(new List<string> { "GROUP_DEFINITION", "GROUP_REPORT_EMAIL_LIST", "GROUP_EQUIPMENT_GROUP_STN_XREF"});
It runs the first two tables fine, however on the third one, it gets stuck and the application runs forever...
Funny thing is, when I switch "GROUP_REPORT_EMAIL_LIST" and "GROUP_EQUIPMENT_GROUP_STN_XREF" The application runs forever after the it hits the second table name.
So in conclusion, the function runs forever when it hits "GROUP_EQUIPMENT_GROUP_STN_XREF". I've verified that the SQL generated works by testing it out on toad.
Anyone else ran into this issue?
EDIT - The first two tables does indeed get cleared when it runs.
Solution
string connectionString = "CONNECTIONSTRING";
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand command = connection.CreateCommand();
OracleTransaction trans = connection.BeginTransaction();
command.Transaction = trans;
foreach (string table in tableNames)
{
string sql = String.Format("DELETE FROM TOA_REPORTING.{0}", table);
command.CommandText = sql;
command.ExecuteNonQuery();
}
trans.Commit();
}
TRUNCATE would have been a very nice solution, however I do not have the privileges to do so!
Have you forgotten to commit your changes in Toad (or any other client)? An open transaction will cause it to wait indefinitely.