#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**;