【问题标题】:DBMS_STATS.GATHER_SCHEMA_STATS is throwing ORA-06550,PLS-00306,ORA-06550 exceptionDBMS_STATS.GATHER_SCHEMA_STATS 抛出 ORA-06550,PLS-00306,ORA-06550 异常
【发布时间】:2019-12-29 04:54:39
【问题描述】:

我正在尝试使用 C# .net 收集 oracle 架构的统计信息

 command = new OracleCommand();

 command.CommandText = "DBMS_STATS.GATHER_SCHEMA_STATS";

 command.Parameters.Add(new OracleParameter("ownname", "APP_PM"));
 command.Parameters.Add(new OracleParameter("estimate_percent", 100));
 command.Parameters.Add(new OracleParameter("degree", 30));
 command.Parameters.Add(new OracleParameter("cascade", "TRUE"));

 appEngine.ExecuteSProc(command);

我得到了这个例外。

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GATHER_SCHEMA_STATS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

有人知道吗?

【问题讨论】:

  • 我认为“级联”参数有问题。
  • cascade 接受一个布尔参数,我想你可能是在发送一个字符串
  • 根据this Microsoft support ticket,您不能使用 OracleParameter 传递 BOOLEAN 参数。您可能需要使用匿名 PL/SQL 块从 C# 应用程序运行 GATHER_SCHEMA_STATS。祝你好运。
  • 谢谢@BobJarvis support.microsoft.com/kb/306530 票真的很有帮助,我只是在其他程序中调用了这个程序作为解决方法。

标签: plsql oracle11g ado.net


【解决方案1】:

关于 CASCADE 参数的问题,如果不能传递 BOOLEAN,也可以使用SET_PARAM procedure 设置参数值。

语法:

DBMS_STATS.SET_PARAM (
   pname      IN    VARCHAR2, 
   pval       IN    VARCHAR2);

Bob 的建议很好。您可以将其包装在 PL/SQL 匿名块中并作为脚本执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多