using (var command = oracleConnection.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", 10));
//command.Parameters.Add(new OracleParameter("estimate_percent", Decimal.Parse("10")));
//command.Parameters.Add("estimate_percent", OracleDbType.Decimal).Value = 10;
int ret = command.ExecuteNonQuery();
}
所有注释掉的方法都会导致错误 - ORA-20001:10是无效的标识符。 estimate_percent的Oracle数据类型是数字。
答案 0 :(得分:0)
尝试在参数声明中使用显式OracleDb类型:
using (var command = oracleConnection.CreateCommand())
{
command.CommandText = "DBMS_STATS.GATHER_TABLE_STATS";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ownname", OracleDbType.Varchar2));
command.Parameters.Add(new OracleParameter("tabname", OracleDbType.Varchar2));
command.Parameters.Add(new OracleParameter("estimate_percent", OracleDbType.Decimal));
command.Parameters[0].Value = schemaname;
command.Parameters[1].Value = tablename;
command.Parameters[2].Value = 10M;
int ret = command.ExecuteNonQuery();
}
答案 1 :(得分:0)
无意中偶然发现了解决方案。 Oracle按顺序引用参数,而不是按名称引用。 ' ESTIMATE_PERCENT'是第4个参数,所以我只是添加了第3个参数' partname'它起作用了。