有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaJooq生成一个静态方法来调用函数,但没有方法将其作为字段

我想将此SQL语句转换为jOOQ select:

select art_id,
       artnr,
       pa_bez.arttext(art_id, null, pa_param.text(10, 1)) text,
from artikel;

但我不能用帕乌·贝兹。arttext,因为在生成的包PaBez中,我只能找到一个静态方法来调用函数:

public static String arttext(Configuration configuration, Number pArtId, 
                             String pArttextart, String pSprache, 
                             Number pAufart, Boolean pFallbackArttextart) {
...
}

但没有方法像我在其他函数中得到的那样将其用作字段:

public static String arttextart(Configuration configuration, String pArttextart, 
                                String pSprache) {
...
}

public static Field<String> arttextart(String pArttextart, String pSprache) {
...
}

这是我对jOOQ的误解还是错误

这是功能代码:

FUNCTION ARTTEXT
(p_art_id     in number
,p_arttextart in varchar2 default 'basis'
,p_sprache    in varchar2 default null
,p_aufart     in number   default null
,p_fallback_arttextart in boolean default true
)
RETURN VARCHAR2

共 (1) 个答案

  1. # 1 楼答案

    BOOLEAN数据类型是PL/SQL数据类型,在SQL引擎中不存在。不幸的是,在SQL中没有直接的方法将布尔参数传递给函数

    然而,在使用Oracle12进行测试时,如果函数签名中有一个默认值,那么jOOQ可以省略该参数。这应该是可行的(但jOOQ 3.11还不支持它):

    SELECT pa_bez.arttext(1) FROM dual
    

    如果必须传递布尔绑定变量,以下解决方法也可以:

    WITH
      FUNCTION arttext_(
        p_art_id     in number
       ,p_arttextart in varchar2 default 'basis'
       ,p_sprache    in varchar2 default null
       ,p_aufart     in number   default null
       ,p_fallback_arttextart in number default 1
      ) RETURN VARCHAR2 IS BEGIN
        RETURN pa_bez.arttext(
          p_art_id, 
          p_arttextart, 
          p_sprache,
          p_aufart
          CASE p_fallback_arttextart WHEN 1 THEN TRUE WHEN 0 THEN FALSE ELSE NULL END
        );
      END arttext_;
    SELECT arttext_(?, ?, ?, ?, ?) FROM dual
    

    我认为jOOQ 3.12可以为Oracle 12+实现上述解决方案。我为此提出了一个问题: https://github.com/jOOQ/jOOQ/issues/8522

    I've also blogged about this in more detail here

    同时,您可能需要手动桥接调用,方法是创建一个辅助函数,如我所示,在NUMBERBOOLEAN之间进行转换