Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jOOQ生成一个静态方法来调用函数,但没有方法将其作为字段来获取_Java_Sql_Oracle_Plsql_Jooq - Fatal编程技术网

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

Java jOOQ生成一个静态方法来调用函数,但没有方法将其作为字段来获取,java,sql,oracle,plsql,jooq,Java,Sql,Oracle,Plsql,Jooq,我想将此SQL语句转换为jOOQ select: select art_id, artnr, pa_bez.arttext(art_id, null, pa_param.text(10, 1)) text, from artikel; 但是我不能使用pa_bez.arttext,因为在生成的包PaBez中,我只能找到一个静态方法来调用函数: public static String arttext(Configuration configuration, Numbe

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

select art_id,
       artnr,
       pa_bez.arttext(art_id, null, pa_param.text(10, 1)) text,
from artikel;
但是我不能使用pa_bez.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) {
...
}

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

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

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

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
我认为Jooq3.12可以为Oracle12+实现上述解决方案。我为此创建了一个问题:


同时,您可能需要手动桥接您的调用,方法是创建一个辅助函数,如我所示,在
NUMBER
BOOLEAN

之间进行转换。噢,我没有注意到BOOLEAN。非常感谢。
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