大家早上好。
我在JDBC ORACLE数据库查询中使用MEL Expression时遇到问题。
特别是Mule流接受一个Excel文件,该文件通过Datamapper在Map中转换,其字段用于以这种形式在数据库中进行查询:
<jdbc-ee:query key="Fill Table" value="INSERT INTO BUFF_SBIL_ZONALE (DATA_ORA,MACRO_ZONA,SEGNO_SBIL,PRZ_MSD_VEN,PRZ_MSD_ACQ,ID_BIS,FILE_NAME,DATA_LOAD)
VALUES (TO_DATE(#[map-payload:DATA_ORA], 'DD/MM/YYYY hh:mi:ss'),#[map-payload:MACROZONA],#[map-payload:SEGNO],#[map-payload:P_medioMSD_VEN],#[map-payload:P_medioMSD_ACQ],#[message.inboundProperties['correlationId']],#[message.InvocationProperty['originalFilename']],SYSDATE)"/>
查询似乎是正确的但是当我执行应用程序时,我收到一个异常,建议我#[map-payload:P_medioMSD_VEN] 为NULL(正确,因为在Excel文件中它没有存在)并且MEL表达式不能读取NULL值。 因此,问题不是SQL问题,而是MEL问题,它不接受NULL数据库字段值。
是否有人知道如何绕过MEL Exception以接受可以为空的值?
提前感谢所有人
引发的异常是:* org.mule.api.expression.RequiredValueException:表达式为“xy”的表达式Evaluator“bean”返回null但需要一个值。 *
答案 0 :(得分:3)
我找到了解决方案。 我在这里写的只是为了一些有同样问题的人。
如果你想让MEL表达式值可选(即NULL值是正确的值),你应该写一个'?'在MEL表达式结束时。
#[map-payload:P_medioMSD_ACQ?]
放一个'?'值是可选的,接受NULL值
答案 1 :(得分:0)
在将它们传递给MEL
之前,请检查字段是否为NOT NULL
。如果您知道某些字段始终为NULL
,请不要在插入查询中指定它,它将在db中获得默认值NULL