Мне нужно передать список уникальных идентификаторов хранимой процедуре из 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? Возможно ли это в настоящее время?