2016-09-01 3 views
2

Я ищу запрос из пользовательской функции. Все пример я видел запрашивает функцию в качестве параметра selectЗапрос от пользовательской функции JOOQ

myFunction.setMyParam("plapla"); 
create.select(myFunction.asField()).fetch(); 

Это возвращает результат в виде одного столбца, хотя результат на самом деле несколько столбцов.

То, что я хотел бы сделать, это

myFunction.setMyParam("plapla"); 
create.select().from(myFunction).fetch(); 

Но я не нашел способ сделать это ...

В настоящее время я использую

DSL.using(create.configuration()) 
       .select() 
       .from("myFunction('" + myparam + "')") 
       .fetch(); 

и это делает не похоже на хорошее решение (необесцененный, необработанный и т. д.)

Как это сделать, используя функцию JOOQ?

+0

Значительные функции, в зависимости от диалекта SQL в jOOQ. Какую базу данных вы используете? Кроме того, вы могли бы показать подпись своего «MY_FUNCTION», как вы ее объявили в своей базе данных? –

+0

Использование postgres и 'MY_FUNCTION (текст, целое число, текст)' – user3960875

+0

Возможно, связано с этой проблемой http://stackoverflow.com/questions/28383480/getting-results-from-table-valued-postgresql-function-with-jooq Моя функция возвращает таблицу 'RETURNS TABLE (текст myParams) AS $ BODY $' 'myFunction.execute (configuration()); myFunction.getMyParameter(); ' возвращает только первую строку. Используя JOOQ 3.8.3 – user3960875

ответ

1

jOOQ генерирует вызовы функций для табличных функций PostgreSQL. Если функция выглядит следующим образом:

CREATE FUNCTION my_function(text, integer, text) 
RETURNS TABLE (myParams text) AS ... 

Затем jOOQ производит следующий метод:

public class Tables { 
    ... 
    public static MyFunction myFunction(String param1, Integer param2, String param3) 
    { ... } 
} 

Что вы можете назвать как таковой:

Result<MyFunctionRecord> result = 
DSL.using(create.configuration()) 
    .selectFrom(myFunction("a", 1, "b") 
    .fetch(); 

В результате запись будет иметь форма:

public class MyFunctionRecord { 
    ... 
    public String getMyParams() { ... } 
} 
+0

Моя функция, как вы упомянули, но она не опубликована в разделе «Таблицы», она находится под подпрограммами – user3960875

+0

. Я вижу, есть флаг для этого в конфигурации генератора кода, чтобы иметь его также под таблицами. Это не имеет значения. –

+1

Настройка ' true' работала – user3960875

Смежные вопросы