Mule SQL слияния ", когда не соответствует источнику, то" не работает - PullRequest
0 голосов
/ 29 января 2019

Мне не удалось получить предложение «когда не сопоставлено по источнику» с соединителем базы данных Mule.Действие в предложении «когда не соответствует источнику» выполняется, даже если условие условия не выполняется.

Я сделал небольшой пример проекта, чтобы более подробно объяснить ситуацию.Я использую sql-сервер и Mule 3.9.0.

Вот исходная таблица:

[Source Table][1].

Идея состоит в том, чтобы переместить всеиз этой таблицы в целевой таблице.В целевой таблице есть еще одно значение флага 'isDeleted', и идея состоит в том, чтобы установить это 1, когда строка удаляется из источника.

Вот фактическое предложение слияния:

MERGE [mergetest_target] AS target
    USING(
        SELECT
            #[payload.get("id")] AS id,
            #[payload.get("text")] AS text
    ) AS SOURCE ON (target.id = source.id) 
WHEN NOT MATCHED BY SOURCE THEN
    UPDATE SET
        isDeleted = 1
WHEN MATCHED THEN
    UPDATE SET
        text = source.text,
        isDeleted = 0

WHEN NOT MATCHED BY TARGET THEN
    INSERT 
        (id, text, isDeleted)
    VALUES
        (source.id, source.text, 0)
        ;

Результатом первого диска должно быть то, что все строки из исходной таблицы перемещаются в целевую таблицу, и все значения «isDeleted» равны 0.

Фактический результат сильно отличается.Вот таблица назначения после первого запуска

[Target table][2].

Таким образом, все строки были перемещены, но все, кроме одного, имеют isDeleted как 1.

Я довольно озадачен этим результатом.Если кто-то может помочь мне понять этот результат и, возможно, исправить мое положение о слиянии.Спасибо

Вот полная конфигурация мула xml:

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

<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
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
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
    <flow name="mergetestFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/mergetest" doc:name="HTTP"/>
        <db:select config-ref="PowerBI_AzureSQL" doc:name="Database">
            <db:parameterized-query><![CDATA[Select * from mergetest_source;]]></db:parameterized-query>
        </db:select>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <db:update config-ref="PowerBI_AzureSQL" bulkMode="true" doc:name="Database">
            <db:parameterized-query><![CDATA[MERGE [mergetest_target] AS target
    USING(
        SELECT
            #[payload.get("id")] AS id,
            #[payload.get("text")] AS text
    ) AS SOURCE ON (target.id = source.id) 
WHEN NOT MATCHED BY SOURCE THEN
    UPDATE SET
        isDeleted = 1
WHEN MATCHED THEN
    UPDATE SET
        text = source.text,
        isDeleted = 0

WHEN NOT MATCHED BY TARGET THEN
    INSERT 
        (id, text, isDeleted)
    VALUES
        (source.id, source.text, 0)
        ;]]></db:parameterized-query>
        </db:update>
    </flow>
</mule>
...