如何使用 jOOQ 将 Oracle PL/SQL 常量作为参数传递?

How do I pass Oracle PL/SQL constants as parameters using jOOQ?

我正在尝试将一些使用 PL/SQL 的 Oracle 查询转换为 jOOQ。使用代码生成器,大多数包查询、存储过程等都很容易。然而,在几个地方使用了一个功能,我还没有找到 jOOQ 的替代品:

begin
  MY_SCHEMA.MY_PACKAGE.MY_QUERY(some_param => MY_SCHEMA.MY_PACKAGE.SOME_CONSTANT)
  -- more code
end;

我可以很好地调用查询,但我不确定如何将 MY_SCHEMA.MY_PACKAGE.SOME_CONSTANT 值传递给它。 jOOQ 代码生成器似乎没有为常量生成任何东西(至少,我找不到任何类似名称的东西)。我需要在生成器上启用某个功能吗?还是我需要查询这些常量?如果是,怎么做?

启用 PL/Scope 以使其工作

jOOQ 可以为您的包常量生成代码 if 它可以在您的 ALL_IDENTIFIERS 字典视图中找到它们。只有在编译包时启用 PLSCOPE_SETTINGS 才会出现这种情况,例如使用:

ALTER SESSION SET PLSCOPE_SETTINGS='IDENTIFIERS:ALL'

有了它,jOOQ 将为您的包常量生成表达式,您可以在例程调用或其他 procedural logic.

中使用这些表达式

PL/Scope独立

Simon Martinelli 在评论中提到的问题 https://github.com/jOOQ/jOOQ/issues/6504,即使没有打开上述 PL/Scope 设置,它也会尝试启用此代码生成支持,因为根据您的环境,这非常不可靠.

截至 jOOQ 3.15,还没有适用于任何 Oracle 环境的解决方案。 But you could use testcontainers to generate your jOOQ code 来自启用了 PL/Scope 的 Docker 图片。