【问题标题】:Pass String array to Oracle query using jOOQ使用 jOOQ 将字符串数组传递给 Oracle 查询
【发布时间】:2021-12-26 19:17:26
【问题描述】:

我正在使用 jOOQ 代码生成器从 Oracle 包中调用查询。查询的参数之一是字符串数组。

第一个问题是代码生成器使用Object作为参数的类型。生成的文档告诉我使用明确的Binding,但没有说明如何或在哪里。我假设我必须在GenerationTool 上配置一些东西。我该怎么做?

第二个问题是要传递什么实际值。我试过String[]List<String>,但都不管用。然后我最终编写了自己的简单类:

public class MyStringArray extends ArrayRecordImpl<String> {
  public MyStringArray() {
    super(MySchema.MY_SCHEMA, "ARR_STR", SQLDataType.VARCHAR(255));
  }
}

这行得通,但感觉就像一个 hack。我该如何以“好”的方式做到这一点?

【问题讨论】:

  • 1) 您使用的是什么 jOOQ 和 Oracle 版本? 2)你的ARR_STR类型在DDL中的定义是什么?
  • jOOQ 3.15.4,Oracle 19。我明天回去工作时会检查 2)。
  • @LukasEder 感谢您的提示!在搜索 ARR_STR 类型的 DDL 时,我在另一个模式中找到了它,这不是由生成器完成的。我添加了它,并生成了一条记录,并由生成的查询使用。这样就解决了这两个问题。
  • 很高兴听到这个消息,我怀疑这可能是原因。我们可能应该改进生成的 Javadoc 以暗示这是一个可能的解决方案,而不是手动实现 Bindinggithub.com/jOOQ/jOOQ/issues/12630。您可以在这里用您的发现回答您自己的问题,以帮助未来的访问者...

标签: java oracle jooq


【解决方案1】:

用户定义类型发生这种情况的最常见原因是该类型与引用它的例程处于不同的架构中,或者使用&lt;excludes&gt; 明确排除了它。在这两种情况下,您都可以:

  • 按照 Javadoc 中的提示执行操作,并实现您自己的绑定
  • 更好:在代码生成配置中包含引用的类型

生成的 Javadoc 可以改进,因为 jOOQ 知道该类型是用户定义的类型,并且生成输出中缺少它。我创建了一个问题来改进它:https://github.com/jOOQ/jOOQ/issues/12630

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 2011-12-22
    • 2018-07-12
    • 1970-01-01
    • 2015-04-20
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多