我试图在Mule4中实现一个用例,如果还没有给用户分配一个旅游,就需要为它分配一个向导。
我希望能够使用Mule db:insert组件实现它,并在不存在SQL脚本的地方使用INSERT,如下所示。
INSERT INTO TL_MAPPING_TOUR(TOURNO,TLID,SYSTEM) select :tourno,:tlid,:system from DUAL
where not exists(select * from TL_MAPPING_TOUR where (TOURNO=:tourno and TLID=:tlid and SYSTEM=:system))然而,这将导致Mule异常。
Message : ORA-01722: invalid number
Error type : DB:BAD_SQL_SYNTAXTL_MAPPING_TOUR表有一个id列(主键),但这是由序列自动生成的。
同样的脚本修改为在中直接运行,如下面所示,运行良好。
INSERT into TL_MAPPING_TOUR(TOURNO,TLID,SYSTEM)
select 'CLLO001474','123456789','AS400'
from DUAL
where not exists(select * from TL_MAPPING_TOUR where (TOURNO='CLLO001474' and TLID='123456789' and SYSTEM='AS400'));显然,Mule db:insert组件不喜欢语法,但我不太清楚这里有什么问题。我也找不到Mule4数据库组件不存在的任何插入示例实现。
stackoverflow页面https://stackoverflow.com/questions/54910330/insert-record-into-sql-server-when-it-does-not-already-exist-using-mule指向未找到的页面。
您是否知道这里有什么问题,以及如何在不使用另一个Mule4 db:select组件的情况下在db:insert之前实现这一点?
发布于 2020-04-25 12:47:04
我不知道"mule4",但是这个:
消息: ORA-01722:无效号码
并不意味着语法是错误的(正如您已经测试过的那样--在另一个工具中,相同的语句工作正常)。
原因:您执行了一条试图将字符串转换为数字的SQL语句,但没有成功。 决议: 解决此Oracle错误的选项是: 选项1:只有数字字段或包含数字值的字符字段可以用于算术操作。确保所有表达式都计算为数字。 选项2:如果要从日期中添加或减去日期,请确保从日期中添加/减去了一个数值。
换句话说,似乎其中一个列被声明为数字,而您传递的是一个字符串。Oracle在seems中测试语句时执行隐式转换,但似乎mule4没有执行,因此出现了错误。
最明显的原因(根据您发布的内容)是将'123456789'放入TLID中,因为其他值显然是字符串。因此,传递123456789 (一个数字,它周围没有单引号),看看会发生什么。应该行得通。
发布于 2020-04-25 17:14:43
太宽容了。它将将字符串转换为数字,如果可以,则自动将字符串转换为数字。而且它可以做很多。Mulesoft DB连接器的尝试是相同的,但它并不像本地工具那样成功。通常情况下,它无法转换,特别是在日期,但这不是你的情况。总之,不要太相信Mulesoft的太多数据意义。如果成功的话-太棒了!否则,尝试从其中消除任何智能,并执行查询中的所有转换,更好的是从字符串中进行转换。通常,数字可以正常工作,但如果不工作-使用数函数来正确标记这是数字。
关于这一点的更多信息,请看https://simpleflatservice.com/mule4/AvoidCoversionsOrMakeThemNative.html
https://stackoverflow.com/questions/61425757
复制相似问题