【问题标题】:jooq use oracle text contains queryjooq 使用 oracle 文本包含查询
【发布时间】:2019-08-29 21:28:51
【问题描述】:

我正在使用 jooq 构建查询,需要使用 oracle 文本向 where 子句添加条件.. 到目前为止,我已经建立了一组条件,并在最后用于构建查询......

List<Condition> conditions = new ArrayList<Condition>();
if(null != searchCriteria.getId()) {
    conditions.add(field("id").eq(searchCriteria.getId()));
} else if(null != searchCriteria.getSurname()) {
    //add contains condition here. e.g. "CONTAINS (SURNAME, 'POTTER', 1) > 0
}

我看不到如何构建此条件,或者至少手动构建此 SQL 字符串,然后添加为条件,然后生成完整的查询,如...

org.jooq.Query ps = select(field("ID")).from(table("PERSON per").where(conditions);

【问题讨论】:

    标签: java jooq


    【解决方案1】:

    您已经在查询的其他部分中使用了plain SQL templating 功能,这可能是无意的。现在您可以使用它直接在 jOOQ 中构建供应商特定的语法扩展。例如:

    static Condition contains(Field<String> field, String search, int label) {
        return condition("contains({0}, {1}, {2}) > 0", field, val(search), inline(label));
    }
    

    在上面的例子中,我使用的是DSL.condition(String, Object...)

    【讨论】:

    • 为这个答案干杯@Lukas Eder,我唯一发现的是我无法为分数标签值设置绑定变量。我得到 ORA-29909:辅助运算符的标签不是文字数字。我必须硬编码这个值才能工作,任何人都知道解决方法。
    • 很抱歉一直问,但是我将如何使用表连接动态地构建一个 from 子句,就像使用 where 子句一样。或者我应该问另一个问题吗?我有一个动态构建的搜索查询,如果存在搜索参数,我需要添加表连接。但我想创建一个连接列表,以便在最后添加到查询中。
    • @jonesy:请提出一个新问题
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2017-02-25
    • 2013-12-19
    • 2014-07-03
    • 2012-03-03
    • 1970-01-01
    • 2014-01-01
    • 2014-09-14
    相关资源
    最近更新 更多