org.mule.api.MessagingException:必须声明表变量“@ P0”

时间:2017-10-27 17:12:41

标签: database jdbc mule

当我尝试通过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>

1 个答案:

答案 0 :(得分:0)

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

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

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

但是,根据文档https://docs.mulesoft.com/mule-user-guide/v/3.6/database-connector#query-types我认为我不能使用变量表名,或者一般的SQL语句的可变部分......只是&#34;参数值&#34;。< / p>

另一方面,我能够为此目的使用动态查询,但我必须确保插入数据的正确性(在这个简单的情况下引用字符串)。

工作代码如下所示:

<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>