【问题标题】:Get Oracle Package Procedure Parameters with Java使用 Java 获取 Oracle 包过程参数
【发布时间】:2017-07-12 20:45:12
【问题描述】:

我正在尝试获取给定包中给定 Oracle 过程的参数。它总是不返回任何数据。

当获取不在包中的过程的参数时,我们的逻辑可以正常工作。我希望这能正常工作。因为它要求一个包名,所以我没想到必须做任何其他事情。

一旦我建立了连接,我们就会运行这个:

dbMetaData = conn.getMetaData();
rs = dbMetaData.getProcedureColumns(packageName, null, procedureName, null);
while(rs.next()){
  ...
}

rs.next 总是假的。我一定是错过了什么?

【问题讨论】:

  • 抱歉,我当然不是 Oracle 专家。我认为甲骨文包适用于目录。一旦我们得到参数,我们就使用 SimpleJdbcCall 来执行该过程。在 SimpleJdbcCall 类上有一个名为“withCatalogName”的方法。其 java 文档内容如下: (可选)指定包含存储过程的目录的名称。为了提供与 Oracle DatabaseMetaData 的一致性,如果过程被声明为包的一部分,则用于指定包名称。

标签: java oracle stored-procedures


【解决方案1】:

您想获取过程的所有列,对吗?所以你应该使用% 而不是null。尝试更改您的代码,如下所示,然后重试:

rs = dbMetaData.getProcedureColumns(packageName, null, procedureName, "%");

【讨论】:

  • 不完全,但它有所帮助。请参阅我发布的最终解决该问题的答案。
【解决方案2】:

我最终发现,如果您在模式模式字段中传递模式,则此调用有效。如果没有架构,将找不到 oracle 包。

rs = dbMetaData.getProcedureColumns(packageName, schemaName, procedureName, "%");

【讨论】:

  • 如果这解决了您的问题,那么很好,但这不是真的。在这里使用schemaPattern 是一种过滤器。当NULL 表示模式名称不用于缩小搜索范围时。这并不意味着它不会搜索您的程序。您可以查看 Oracle 文档以获取 DatabaseMetaData
猜你喜欢
  • 1970-01-01
  • 2011-02-20
  • 2019-12-22
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2012-03-18
  • 2019-10-29
相关资源
最近更新 更多