Почему я не могу использовать CTE в своем операторе select?

У меня есть приложение Mule, выполняющее запрос к БД, который работает отлично (хотя и немного медленно). Это детали:

  • Мул 3.7.2 EE
  • Студия Anypoint 5.4.1
  • jdk1.7.0_51
  • Использование драйвера оракула ojdbc6

Теперь, когда я создаю соединение database с помощью драйвера ojdbc6, без использования Common Table Expression (CTE), запрос выполняется нормально (за 2,5 секунды).

Когда я использую свой CTE, запрос завершается с ошибкой:

org.mule.api.MessagingException: тип запроса должен быть одним из «[SELECT, STORE_PROCEDURE_CALL]», но должен быть «DDL» (java.lang.IllegalArgumentException). Полезная нагрузка сообщения имеет тип: NullPayload.

Ясно, что в какой-то момент сервер Mule EE думает, что я пытаюсь выполнить DDL, хотя это не так.

Новый запрос с использованием CTE отлично работает (с точностью до 0,250 с) в SQL Developer, поэтому я знаю, что это не мой запрос.

Почему я не могу использовать оператор CTE (WITH) в Mule?

Это известная проблема? Я делаю что-то неправильно?


Запрос (упрощенный) перед CTE:

SELECT '1' AS COLUMN_ONE, 'X' AS COLUMN_X
FROM DUAL

Запрос (упрощенный) после CTE:

WITH TBL AS
(
    SELECT '1' AS COLUMN_ONE, 'X' AS COLUMN_X
    FROM DUAL
)
SELECT * FROM TBL

person Möoz    schedule 21.03.2016    source источник


Ответы (2)


По состоянию на 27 апреля 2016 г. оператор CTE не поддерживается Mule.

Мне пришлось копать глубоко для этого.

  • I tweeted this question and tagged @MuleSoft and @MuleDev
    • To which I got the reply:

      если вы еще этого не сделали, мы также предлагаем опубликовать это на форумах - http://forums.mulesoft.com

  • I then posted the issue on the Mulesoft Forums
    • To no avail
  • I then logged a support ticket with Mulesoft (case number 00107313)
    • To which I got the reply:

      WITH в настоящее время не поддерживается Mule ESB. Запрос на улучшение (SE-987) был отправлен, но еще не реализован.
      Команда инженеров работает над JIRA на основе приоритетов. Если вам срочно нужна эта JIRA, предоставьте следующую информацию, и я передам JIRA для вас.

person Möoz    schedule 26.04.2016

На данный момент вы можете решить эту проблему, написав альтернативный оператор выбора, как в

Sql - альтернатива WITH... AS

Не имеет смысла и очень не повезло Mule не поддерживать CTE

person mcvkr    schedule 17.04.2017