【问题标题】:Fetch Oracle procedure metadata with Java when multiple procedure signatures多个过程签名时使用 Java 获取 Oracle 过程元数据
【发布时间】:2019-12-22 20:33:29
【问题描述】:

我们有一个具有多个过程签名的 Oracle DB。它们每个都有 6 个参数,但在签名的每个变体中,最后一个参数是不同的类型。

例如,在一种变体中,最后一个参数是 clob,在另一种变体中是 varchar。

在执行过程之前,我们会查找过程的列

rs = conn.getMetaData().getProcedureColumns(packageName, schema, procedureName, "%");

此调用始终只返回过程的一种表示形式的列。这是有问题的,因为我们使用该响应中的列来最终在执行之前将参数加载到可调用语句中。我们这样做是为了获得参数范围(输入、返回等)。如果元数据提取提取了最后一个参数是字符串的变体,但我们实际上是在尝试使用 clob 执行那个变体,那么它会出错,因为它试图执行过程的错误变体。

【问题讨论】:

    标签: java oracle stored-procedures jdbc metadata


    【解决方案1】:

    如果您不反对使用 oracle 数据字典,您可以像这样获取所有过程/列元数据:

    select * from all_arguments
    where user = '<your schema>' 
    and package_name = '<you rpackage>'
    and object_name = '<your procedure>'
    order by subprogram_id, position
    

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 2013-01-30
      • 2017-09-20
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多