jOOQ генерирует статический метод для вызова функции, но не имеет метода для получения его в качестве поля - PullRequest
1 голос
/ 13 апреля 2019

Я хочу превратить этот оператор SQL в выборку jOOQ:

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) {
...
}

Это ошибка или недоразумение jOOQ на моей стороне?

Это код функции:

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 boolean default true
)
RETURN VARCHAR2

1 Ответ

1 голос
/ 13 апреля 2019

Тип данных BOOLEAN является типом данных PL / SQL и не существует в механизме SQL.К сожалению, нет прямого способа передать логический аргумент вашей функции в SQL.

Однако, тестируя с Oracle 12 и учитывая, что в сигнатуре вашей функции есть значение по умолчанию, jOOQ может просто пропустить параметр,Это должно работать (но пока не поддерживается в jOOQ 3.11):

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

Я думаю, что jOOQ 3.12 мог бы реализовать вышеупомянутый обходной путь для Oracle 12+.Я создал проблему для этого: https://github.com/jOOQ/jOOQ/issues/8522

Я также написал об этом в блоге более подробно здесь .

Тем временем вам, возможно, придется соединитьсяВаш вызов вручную, создавая вспомогательную функцию, как я показал, переводя между NUMBER и BOOLEAN

...