当我试图通过Database Connector中的JDBC - SQL Server配置更新一个Table时,出现以下错误:
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>发布于 2017-10-28 01:20:48
好的。我确实意识到这里发生了什么。
如您所见,我使用的是参数化查询。是我的错。
在使用显式表名的参数化查询中,我没有问题。(仅文本,而不是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>https://stackoverflow.com/questions/46980305
复制相似问题