Ошибка параметра запроса динамической базы данных MuleSoft 4 Anypoint Studio

Мне нужно использовать динамический запрос, чтобы установить имя схемы / библиотеки для запроса к базе данных, и Anypoint Studio 7.4.1 продолжает выдавать ошибку, в которой говорится, что он «не может разрешить значение для параметра: sql».

Я следую этому документу https://docs.mulesoft.com/connectors/db/database-connector-examples#dynamic-queries.

Он работает нормально, когда я запускаю его, но есть ли способ заставить AnyPoint перестать показывать ошибку?

Вот XML

    <flow name="GetLinks" doc:id="c1f17deb-98f2-4261-93ec-cf785e310892" >
        <set-variable value="${db.dataLibrary}" doc:name="Set Library" doc:id="2a5cebbb-3047-4ede-ab0d-7a7257427e7e" variableName="library"/>
        <db:select doc:name="Select EP0001F1" doc:id="ecf2a61f-4e14-4b00-beb1-546d2fa1ba8f" config-ref="Database_Config" fetchSize="100" maxRows="500">
            <db:sql >#[&quot;select * from $(vars.library).EP0001F1 order by EPDRC desc&quot;]</db:sql>
        </db:select>
        <ee:transform doc:name="Transform Message" doc:id="c3b8bcb4-20ef-4b86-a4cd-585e7f57e6d0" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map ( payload01 , indexOfPayload01 ) -> {
    loginId: trim(payload01.EPLOGINID),
    individualId: trim(payload01.EPIID),
    officeNumber: payload01.EPOFID,
    controlNumber: payload01.EPICN,
    webControlNumber: payload01.EPWCN,
    lastUpdatedBy: trim(payload01.EPULU)
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>

Поток показывает ошибку  Свойства потока

Трассировка стека для ошибки показывает

Caused by: org.mule.runtime.core.api.expression.ExpressionRuntimeException: "You called the function '' with these arguments: 
  1: Null (null)
  2: String (".EP0001F1 order by EPDRC desc")

But it expects arguments of these types:
  1: String
  2: String

Trace:
  at main (Unknown)" evaluating expression: ""select * from $(vars.library).EP0001F1 order by EPDRC desc"".
Caused by: org.mule.runtime.api.el.ExpressionExecutionException: You called the function '' with these arguments: 
  1: Null (null)
  2: String (".EP0001F1 order by EPDRC desc")

But it expects arguments of these types:
  1: String
  2: String

Trace:
  at main (Unknown)

person Joe Young    schedule 12.12.2019    source источник


Ответы (2)


Я связался со службой поддержки, и они воспроизвели проблему. Они сказали, что это ошибка DataSense, потому что он не может ссылаться на метаданные во время разработки, даже если он работает во время выполнения. Они также сказали, что он не должен отображать ошибку в потоке. Они заявили, что это дефект, так что надеемся, что он скоро будет исправлен.

person Joe Young    schedule 27.12.2019

вы почти правы. Сделал небольшой образец и проверил его. вот как я написал свой запрос, и у меня это сработало.

[ВЫБРАТЬ * ИЗ $ (vars.schema). TEST_TABLE]

ошибка говорит мне, что ваша переменная равна нулю. Просто убедитесь, что ваша переменная инициализирована с правильным значением, прежде чем использовать ее в запросе. Может быть, просто поместите это в регистратор и убедитесь, что в вашей var.library что-то есть.

введите описание изображения здесь

примечание: я также тестировал его с помощью order by в моем запросе, и это тоже работает. Я тестировал его на сервере microsoft sql. Также я получил эту ошибку только тогда, когда мой var был нулевым. (у меня точно такая же ошибка)

person satish chennupati    schedule 12.12.2019
comment
Меня смущает почти правильно; Я не вижу разницы в запросе. Я не получаю сообщение об ошибке во время выполнения, это только во время разработки, и похоже, что вы получаете ту же ошибку. Ваш комментарий о том, что он равен нулю, заставляет меня думать, что Studio не понимает, что переменная существует. Даже жесткое кодирование переменной в компоненте Set Variable не удаляет ее. Я добавил для него проверку Is Not Null, и это тоже не удаляет его. - person Joe Young; 13.12.2019