首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.mule.api.MessagingException:必须声明表变量"@P0“

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

Stack Overflow用户
提问于 2017-10-28 01:12:41
回答 1查看 714关注 0票数 0

当我试图通过Database Connector中的JDBC - SQL Server配置更新一个Table时,出现以下错误:

代码语言:javascript
复制
org.mule.api.MessagingException: Must declare the table variable "@P0". (com.microsoft.sqlserver.jdbc.SQLServerException).

我的代码片段是这样的:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2017-10-28 01:20:48

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

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

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

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

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

工作代码如下所示:

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46980305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档