java - Oracle 函数中的默认值
问题描述
假设以下函数声明:
FUNCTION ARTTEXTJN
(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 varchar2 default 'J'
)
RETURN VARCHAR2
期望第一个参数所有参数都有一个默认值。
jOOQ 生成一个这样的包方法:
public static Field<String> arttextjn(Field<? extends Number> pArtId, Field<String> pArttextart,
Field<String> pSprache, Field<? extends Number> pAufart, Field<String> pFallbackArttextart) {
Arttextjn f = new Arttextjn();
f.setPArtId(pArtId);
f.setPArttextart(pArttextart);
f.setPSprache(pSprache);
f.setPAufart(pAufart);
f.setPFallbackArttextart(pFallbackArttextart);
return f.asField();
}
如果我想在查询中使用它,我必须将 null 传递给函数:
dsl.select(KAMPARTIKEL.ARTNR, KAMPARTIKEL.ARTNRKAMP,
PaBez.arttextjn(KAMPARTIKEL.ART_ID, null, null, null, null))
但是 Oracle 不使用默认值。
有没有办法告诉 jOOQ 生成具有所有可能组合的重载方法?否则我无法在 select 子句中使用该函数。
解决方案
有没有办法告诉 jOOQ 生成具有所有可能组合的重载方法?
不,会有太多的组合。当然,您可以自己扩展代码生成器,但我建议不要这样做。
否则我无法在 select 子句中使用该函数。
是的,你可以使用它!但是没有使用那个辅助方法PaBez.arttextjn
。可以将其称为独立函数调用:
Arttextjn f = new Arttextjn();
f.setPArtId(1);
f.execute();
String result = f.getReturnValue();
也应该可以在 SQL 语句中使用:
Arttextjn f = new Arttextjn();
f.setPArtId(KAMPARTIKEL.ART_ID);
var result =
dsl.select(KAMPARTIKEL.ARTNR, KAMPARTIKEL.ARTNRKAMP, f.asField())
.from(KAMPARTIKEL)
.fetch();
在您的情况下,这应该是开箱即用的。
请注意,从 jOOQ 3.11 开始,在 Oracle 中,jOOQ 在这种情况下按索引传递函数参数,而不是按名称(就像 PostgreSQL 那样)。生成的 SQL 是:
select KAMPARTIKEL.ARTNR, KAMPARTIKEL.ARTNRKAMP, pa_bez.arttextjn(KAMPARTIKEL.ART_ID)
from KAMPARTIKEL
之所以有效,是因为您仅使用第一个参数,而对其余参数应用默认值。如果您传递最后一个参数,它将不起作用,在这种情况下,生成的 SQL 将不得不使用命名参数:
select
KAMPARTIKEL.ARTNR,
KAMPARTIKEL.ARTNRKAMP,
pa_bez.arttextjn(p_art_id => KAMPARTIKEL.ART_ID)
from KAMPARTIKEL
我已经为 jOOQ 3.12 创建了一个问题来解决这个问题: https ://github.com/jOOQ/jOOQ/issues/8560
推荐阅读
- linux - shell 脚本的正确语法
- sapui5 - 尽管调试已关闭,UI5 仍会继续加载调试源
- ansible - 在嵌套循环中创建目录符号链接
- r - 暴露 jupyter 容器的备用端口不起作用
- c# - 进行特定的总和
- css - CSS 网格之谜:网格项中的填充
- java - cleanDataEmbeddedCassandra(KEYSPACE) 将表名转换为小写
- javascript - 从 Angular 控制器调用外部库中的函数
- windows - netsh http add urlacl的委托参数是什么
- javascript - functions.php中的wordpress javascript错误