Java jOOQ生成一个静态方法来调用函数,但没有方法将其作为字段来获取
我想将此SQL语句转换为jOOQ select: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
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