【问题标题】:org.mule.api.MessagingException: Must declare the table variable "@P0"org.mule.api.MessagingException:必须声明表变量“@P0”
【发布时间】:2017-11-17 23:38:35
【问题描述】:

当我尝试通过 JDBC 更新表时出现以下错误 - 数据库连接器中的 SQL Server 配置:

org.mule.api.MessagingException: Must declare the table variable "@P0". (com.microsoft.sqlserver.jdbc.SQLServerException).

我的代码片段是这样的:

<db:update config-ref="SQLSERVER_C" doc:name="UPDATE TABLE">
    <db:parameterized-query><![CDATA[UPDATE #[flowVars.c_table]
SET C_STATUS= #[flowVars.errorNo], PROCESSED=GETDATE(), RETRY=#[flowVars.retry], MESSAGE=#[flowVars.error]
WHERE 
ACCOUNT = #[flowVars.accountNo]
AND LTRIM(RTRIM(SRVORDNO)) = #[flowVars.servOrdNo]]]></db:parameterized-query>
</db:update>

【问题讨论】:

    标签: database jdbc mule


    【解决方案1】:

    好的。我确实意识到这里发生了什么......

    如您所见,我使用的是参数化查询。我的错。

    我对使用显式表名的参数化查询没有任何问题。 (只是文本,不是 flowVar 值也不是 MEL 表达式)。

    但是,根据文档https://docs.mulesoft.com/mule-user-guide/v/3.6/database-connector#query-types,我似乎不能使用变量表名,或者一般的 SQL 语句的变量部分......只是“参数值”。

    另一方面,我可以为此目的使用动态查询,但我必须确保插入数据的正确性(在这个简单的例子中是引用的字符串)。

    工作代码如下:

    <db:update config-ref="SQLSERVER_C" doc:name="UPDATE TABLE">
        <db:dynamic-query><![CDATA[UPDATE #[flowVars.c_table]
    SET C_STATUS= #[flowVars.errorNo], PROCESSED=GETDATE(), RETRY=#[flowVars.retry], MESSAGE='#[flowVars.error]'
    WHERE ACCOUNT='#[flowVars.accountNo]' AND LTRIM(RTRIM(SRVORDNO))='#[flowVars.serviceOrderNo]']]></db:dynamic-query>
    </db:update>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多