【问题标题】:SQL Update statement with MEL expression - Mule带有 MEL 表达式的 SQL 更新语句 - Mule
【发布时间】:2014-06-03 08:11:08
【问题描述】:

我有一个 SQL UPDATE 语句,用于将特定记录更新到 mule 流中的数据库。我在语句中包含 MEL 表达式时遇到问题,并且 SQL 没有在我的流程中执行。

我正在尝试下一个命令:

UPDATE CUSTOMERS SET STATUS=#[flowVars['TxnStatus']] WHERE REF_NUM=#[flowVars['ReferenceNumber']]

TxnStatusReferenceNumber 是我的 mule Flow 中的流变量。看似简单,但记录并没有更新。

当我使用 MEL 表达式尝试类似的 SELECT 语句时,它确实为我检索了值。请让我知道你的想法。

谢谢,

添加配置文件:

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

   <jdbc-ee:mssql-data-source name="MuleDB_DataSource" user="${MuleDB_User}" password="${MuleDB_Password}" url="${MuleDB_URL}" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/>
    <jdbc-ee:connector name="Database" dataSource-ref="MuleDB_DataSource" validateConnections="true" queryTimeout="-1" pollingFrequency="10000" doc:name="Database" transactionPerMessage="false">
    </jdbc-ee:connector>
    <flow name="ExceptionFlowFlow1" doc:name="ExceptionFlowFlow1">
        <vm:inbound-endpoint exchange-pattern="one-way" path="Exception" doc:name="VM"/>
        <set-variable variableName="ExceptionPayload" value="#[payload]" doc:name="ExceptionPayload"/>
        <set-variable variableName="TxnStatus" value="Failure" doc:name="Variable"/>        
        <logger message="#[variable:TxnStatus]" level="INFO" category="Status" doc:name="Logger"/>
        <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="Update_Status" queryTimeout="-1" connector-ref="Database" doc:name="Update_Status">
            <jdbc-ee:query key="Update_Status" value="UPDATE CUSTOMERS SET STATUS=#[flowVars['TxnStatus'] WHERE PAYMENT_REFERENCE_NUMBER=#[flowVars['TxnReference']"/>
         </jdbc-ee:outbound-endpoint>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <catch-exception-strategy doc:name="Catch Exception Strategy">
            <logger message="#[exception]" level="INFO" category="ExceptionFlow failed with the exception --" doc:name="Logger"/>
        </catch-exception-strategy>
    </flow>
</mule>

【问题讨论】:

  • 1) 在 Mule 控制台中查找错误消息 2) 为您的数据库打开日志记录并查看传入的 SQL 语句。
  • @AntonKupias - 感谢您的回复。我无权访问数据库日志,并且在 mule 控制台上,我没有看到任何错误消息。
  • 尝试用记录器记录语句和变量,以及变量的类名。如果您使用与 db 预期不同的数据类型设置 var,则数字和字符串之间的 JDBC 转换也可能是一个问题。如果您没有错误日志,则 Var 类/值和 db 字段类型是开始重现问题的最少信息。

标签: mule mule-studio


【解决方案1】:

我可以看到您在查询键中使用的值与您上面给出的命令之间的差异

value="UPDATE CUSTOMERS SET STATUS=#[flowVars['TxnStatus'] WHERE PAYMENT_REFERENCE_NUMBER=#[flowVars['TxnReference']"/>

查询值中都缺少结尾 ]。更正它并重试。

【讨论】:

    【解决方案2】:

    在尝试将流变量用作 SQL 输入值时,我遇到了类似的问题。尝试将#[flowVars['varName']] 替换为#[variable:varName],如下所示:

    UPDATE CUSTOMERS SET STATUS=#[variable:TxnStatus] WHERE REF_NUM=#[variable:ReferenceNumber]
    

    这对我有用。希望对您有所帮助!

    【讨论】:

    • 对不起。 :( 这对我不起作用...还有其他建议吗?
    • 你能修改你的问题来分享你的配置文件吗?也许其他地方有错误。
    • @jvas 我相信你的错误归结于你的 SQL 语句:UPDATE CUSTOMERS SET STATUS=#[flowVars['TxnStatus'] WHERE PAYMENT_REFERENCE_NUMBER=#[flowVars['TxnReference'] - 你指的是一个变量 TxnReference 尚未在你提供的配置文件的任何地方设置- 因此,不会更新任何内容,因为您的语句中的 WHERE 子句不会指向任何内容
    • 对不起,我错过了提及。它是来自 VM 端点的传入 mule 消息的变量
    • 尝试在vm 端点之后立即记录它以查看它是否仍在调用范围内:&lt;logger level="INFO" message="#[variable:TxnReference]"/&gt;,或者尝试&lt;logger level="INFO/&gt; 以查看所有消息属性 - 让我知道什么你得到
    【解决方案3】:
    UPDATE audit_detail
    SET
      status = '3'
    WHERE
      request_id = #[flowVars['ses_request_id']
    AND
      message_id = #[flowVars['ses_message_id']
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多