我无法从C#更改Oracle参数'estimate_percent'

时间:2016-10-04 15:23:52

标签: c# oracle stored-procedures

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数据类型是数字。

2 个答案:

答案 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'它起作用了。