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 楼答案
BOOLEAN
数据类型是PL/SQL数据类型,在SQL引擎中不存在。不幸的是,在SQL中没有直接的方法将布尔参数传递给函数然而,在使用Oracle12进行测试时,如果函数签名中有一个默认值,那么jOOQ可以省略该参数。这应该是可行的(但jOOQ 3.11还不支持它):
如果必须传递布尔绑定变量,以下解决方法也可以:
我认为jOOQ 3.12可以为Oracle 12+实现上述解决方案。我为此提出了一个问题: https://github.com/jOOQ/jOOQ/issues/8522
I've also blogged about this in more detail here
同时,您可能需要手动桥接调用,方法是创建一个辅助函数,如我所示,在
NUMBER
和BOOLEAN
之间进行转换