Вызовите GATHER_TABLE_STATS из .Net

#c# #oracle #stored-procedures #statistics

#c# #Oracle #хранимые процедуры #Статистика

Вопрос:

У меня есть некоторый код, который пытается собрать табличную статистику для данной схемы Oracle и таблицы. Код должен реплицировать инструкцию SQL, которая выглядит следующим образом:

 EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'SchemaName', tabname=>'TableName', estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>'FOR ALL COLUMNS SIZE AUTO');
  

Код C # выглядит следующим образом:

 using (var connection = new OracleConnection(GetConnectionString()))
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        command.CommandText = "DBMS_STATS.GATHER_TABLE_STATS";
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new OracleParameter("ownname", "SchemaName"));
        command.Parameters.Add(new OracleParameter("tabname", "TableName"));
        //command.Parameters.Add(new OracleParameter("estimate_percent", "DBMS_STATS.AUTO_SAMPLE_SIZE"));
        //command.Parameters.Add(new OracleParameter("method_opt", "FOR ALL COLUMNS SIZE AUTO"));
        command.ExecuteNonQuery();
    }
    connection.Close();
}
  

Драйвер Oracle не доволен DBMS_STATS.AUTO_SAMPLE_SIZE по очевидным причинам, но я не знаю, почему он также запрещает FOR ALL COLUMNS SIZE AUTO .

Есть идеи о наилучшем способе установки параметров estimate_percent и method_opt при вызове этой процедуры из .Net?

Ответ №1:

Если вы используете > 10G, ДЛЯ ВСЕХ СТОЛБЦОВ РАЗМЕР AUTO уже является настройкой по умолчанию.

Вы должны быть в состоянии полностью опустить параметр.

Ответ №2:

пожалуйста, добавьте это свойство в вашу команду

 command.BindByName = **true**;