Параметризованный запрос коннектора Mule DB - PullRequest
0 голосов
/ 21 января 2019

Это мой первый опыт работы с Mule, когда я пытался определить поток с соединителем DB. Я определяю параметризованный простой запрос выбора с 3 параметрами, но каким-то образом не в состоянии понять это. Даже я пытался поместить весь / частичный запрос в переменную перед передачей значения переменной для запроса, но не смог успешно. Любая помощь высоко ценится.

select * from employees where employee_country='UK' limit 1,10; 

Здесь UK, 1 и 10 - динамические значения, которые будут получены из пользовательского интерфейса, как показано ниже, http://localhost:9090/employee?country=UK&start=1&limit=10

Моя попытка:

select * from employees where employee_country=#[message.inboundProperties.'http.query.params'.country] limit #[message.inboundProperties.'http.query.params'.start],#[message.inboundProperties.'http.query.params'.limit]

Спасибо, -Свапнил

Ответы [ 2 ]

0 голосов
/ 24 января 2019
  1. В реальном времени вам могут понадобиться эти значения в потоке. Для повторного использования их захват через переменные потока. Когда у нас есть динамическое значение, которое входит в параметры запроса ... захватите его через имя переменной originalQueryParams

#[message.inboundProperties.'http.query.params']

  1. Используйте скрипт groovy для захвата этих переменных и разделения их с помощью установленных свойств вызова.

    def inputRequest = message.getInvocationProperty('originalQueryParams'); message.setInvocationProperty('country',inputRequest.country); return payload;

  2. Теперь Страна - это переменная потока, которую вы передаете в запросе.

    select * from employees where employee_country = '#[flowVars.country]'

Надеюсь, это поможет

0 голосов
/ 21 января 2019

Вы пытаетесь создать динамический запрос.Для параметризованного запроса необходимо разделить значения параметров с помощью заполнителей.Параметризованный параметр не заменит выражения.

Вот разница между двумя вариантами:

<db:select config-ref="DBConfig" doc:name="Database">
    <db:parameterized-query><![CDATA[select * from employees where employee_country= :country limit 1,10;]]></db:parameterized-query>
    <db:in-param name="country" type="VARCHAR" value="#[message.inboundProperties.'http.query.params'.country]" />           
</db:select>

Динамический:

<db:select config-ref="DBConfig" doc:name="Database">
    <db:dynamic-query><![CDATA[select * from employees where employee_country=#[message.inboundProperties.'http.query.params'.country] limit #[message.inboundProperties.'http.query.params'.start],#[message.inboundProperties.'http.query.params'.limit]]]></db:dynamic-query>
</db:select>

Вот документация, объясняющая разницу:

https://docs.mulesoft.com/mule-runtime/3.7/database-connector#query-types

Параметризованным является рекомендуемый подход, поскольку недостатком использования динамических операторов запросов является безопасность, поскольку он оставляет оператор открытым для внедрения SQL.

...