Как передать табличный параметр в хранимую процедуру SQL Server в Mule 4? - PullRequest
0 голосов
/ 20 марта 2019

Мне нужно передать список уникальных идентификаторов хранимой процедуре из API Mulesoft. Ожидается, что процедура вернет все строки данных из таблицы, которые связаны с любым из указанных идентификаторов. Другой подход заключается в том, чтобы выполнять поиск по списку и вызывать процедуру для каждого идентификатора, но я бы не стал принимать неизбежное снижение производительности.

В других языках это может быть достигнуто путем передачи табличного параметра и объединения с ним в хранимой процедуре. Я нашел документацию по использованию пользовательских типов здесь и здесь , но не смог найти никакой документации относительно того, как выполнить то же самое для сервера SQL.

На основании вышеприведенной документации я попробовал следующую конфигурацию.

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
    <global-property doc:name="Global Property" doc:id="80f0a7ad-1d33-4b87-9db5-de5a0db885c1" name="env" value="dev" />
    <db:config name="SQL_Configuration" doc:name="Database Config" doc:id="8ecdec9f-fed6-4f86-891c-f5c7f05acf59" >
        <db:data-types>
                <db:data-type name="IntList" id="2002"/>
        </db:data-types>
        <db:mssql-connection host="${database.host}" user="${database.user}" password="${database.password}" databaseName="${database.name}" port="${database.port}">
            <db:connection-properties >
                <db:connection-property key="integratedSecurity" value="true" />
                <db:connection-property key="authenticationScheme" value="JavaKerberos" />
            </db:connection-properties>
        </db:mssql-connection>
    </db:config>
    <configuration-properties doc:name="Configuration properties" doc:id="d010957f-b05d-4aaa-af54-284a4220228f" file="config.${env}.yaml" />
</mule>

Мул захлебывается конфигурацией. Это приводит к следующей ошибке:

org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 18; cvc-complex-type.2.4.a: Invalid content was found starting with element 'db:data-types'.

Я также пытался определить параметр как STRUCT без определения типа в конфигурации разъема. Хотя я получаю сборку таким образом, во время выполнения она выдает ошибку, подобную следующей:

org.mule.runtime.core.internal.exception.MessagingException: The conversion from UNKNOWN to UNKNOWN is unsupported.;

Эта же ошибка возникает, когда я пытаюсь определить параметр как пользовательский тип, и когда я пытаюсь выполнить без определения типа параметра вообще, поэтому может быть незначительным сделать какие-либо выводы из сообщения об ошибке. Но для меня будет иметь смысл, если данные передаются драйверу, но он не знает, как преобразовать массив в Mulesoft в определяемый пользователем тип таблицы, используемый в качестве параметра в хранимой процедуре.

Как определить и передать TVP в хранимую процедуру SQL Server от Mulesoft? Возможно ли это в настоящее время?

...