Позвоните GATHER_TABLE_STATS из .Net - PullRequest
1 голос
/ 07 июня 2011

У меня есть некоторый код, который пытается собрать статистику таблицы для заданной схемы и таблицы 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 Ответ

1 голос
/ 07 июня 2011

Если вы используете> 10G, АВТОМАТИЧЕСКИЙ РАЗМЕР ДЛЯ ВСЕХ КОЛОНН уже установлен по умолчанию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...