I'm无法修改Oracle参数'estimate_percent'从c#
本文关键字:estimate percent 参数 修改 Oracle | 更新日期: 2023-09-27 18:11:24
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是一个无效的标识符。Oracle的estimate_percent的数据类型是number。
尝试在参数声明中使用显式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();
}
偶然发现了解决方案。Oracle是按顺序引用参数的,而不是按名称。"estimate_percent"是第4个参数,所以我只需添加第3个参数"partname"就可以了。