Я строю запрос, используя jooq, и мне нужно добавить условие в предложение 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);
Вы уже использовали функцию простые шаблоны SQL в других частях запроса, возможно, непреднамеренно. Теперь вы можете использовать его для создания расширений синтаксиса конкретного поставщика непосредственно в 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...)
.
Извините, что продолжаю спрашивать, но как мне динамически создать предложение from с помощью соединений таблиц, как это возможно с предложением where ... или мне следует задать другой вопрос? У меня есть поисковый запрос, который создается динамически, и если существует параметр поиска, мне нужно добавить объединение таблиц... но я хотел бы создать список объединений, которые будут добавлены в запрос в конце.
@jonesy: Пожалуйста, задайте новый вопрос
Спасибо за этот ответ @Lukas Eder, единственное, что я обнаружил, это то, что мне не удалось иметь переменную привязки для значения метки оценки. Я получаю ORA-29909: метка вспомогательного оператора не является буквальным числом. Мне пришлось жестко закодировать это значение, чтобы оно работало, кто-нибудь знает обходной путь.