Finding the Right Size
by in CodeSOD on 2024-04-30Zeke sends us a C# snippet from an extract-transform-load process his company uses. It's… special.
private void ResizeColumn(string table, string column, int minSize)
{
if(null == _connection) return;
string sqlReadSize = "SELECT DATA_LENGTH,DATA_TYPE,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLS WHERE TABLE_NAME = '" + table.ToUpper() + "' AND COLUMN_NAME = '" + column.ToUpper() + "'";
string data_length = "";
string data_type = "";
string data_precision = "";
string data_scale = "";
string sizeInfo = minSize.ToString();
IDataReader r = null;
try
{
r = _connection.DbAccessor.ExecuteSqlText.ExecuteReader(sqlReadSize);
if(null != r && r.Read())
{
if(!r.IsDBNull(0)) data_length = Convert.ToString(r[0]);
if(!r.IsDBNull(1)) data_type = Convert.ToString(r[1]);
if(!r.IsDBNull(2)) data_precision = Convert.ToString(r[2]);
if(!r.IsDBNull(3)) data_scale = Convert.ToString(r[3]);
r.Close();
r = null;
}
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
return;
}
finally
{
if(null != r)
{
r.Close();
r = null;
}
}
if(data_type == "NUMBER")
{
return;
}
if(data_type == "DATE")
{
return;
}
if(data_type == "CLOB")
{
return;
}
if(data_type == "BLOB")
{
return;
}
if(minSize <= Convert.ToInt32(data_length))
{
return;
}
string sqlAlterSize = "ALTER TABLE " + table + " modify "
+ column.ToUpper() + " " + data_type + "(" + sizeInfo + ")";
try
{
_connection.DbAccessor.ExecuteSqlText.ExecuteScalar(sqlAlterSize);
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
return;
}
}