2013-10-28 117 views
0

大家早上好。Mule ESB MEL表達式返回NULL

我有一個JDBC ORACLE數據庫查詢中使用MEL表達的問題。

特別是騾子流接受在通過DataMapper的和字段映射轉化的Excel文件來使數據庫的查詢格式如下:

<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)"/> 

查詢似乎是正確的,但當我執行應用程序時,我收到一個異常指點我,#[圖有效載荷:P_medioMSD_VEN]是NULL(正確的,因爲在Excel文件不存在)和MEL表達無法讀取NULL值。 因此,問題不是SQL問題,而是MEL問題,它不接受NULL數據庫字段值。

有誰知道如何繞過MEL例外,以接受mullable價值?

在此先感謝大家

引發的異常是:* org.mule.api.expression.RequiredValueException:表達式求值「豆」與表達「XY」返回null,但被要求的值。 *

+0

你怎麼樣檢查,如果你通過它之前在MEL查詢所有的 –

+0

首先感謝你的回覆可空字段不爲空。 想一想在地圖中某些字段爲NULL,而其他字段不可爲空。在這種情況下,如何填充可空字段,以便將數據庫中的righr值(對於那些沒有值的值的字段爲NULL,對於那些值進行指定的值)。由於 –

+0

如果字段爲空,不插入查詢指定它的話,那將獲得以dB爲單位 –

回答

3

我找到了解決方案。 我會在這裏寫作,只爲someboby會有同樣的問題。

如果你想使一個MEL表達式的值可選的(即一個NULL值是正確的值),你應該寫一個「?」在MEL表達式的末尾。

#[map-payload:P_medioMSD_ACQ?] 

把'?'該值是可選的,一個NULL值被接受

+0

請接受此解決方案,如果它是一個! – Zavior

+0

我不知道我該怎麼做。我必須等待一天才能點擊此答案作爲解決方案 –

0

在將它們傳遞到MEL之前,請檢查字段是否爲NOT NULL。如果您知道某些字段始終爲NULL,請不要在插入查詢中指定它,它會在db中獲取默認值NULL

+0

好NULL的默認值,但我不知道該怎麼dinamically指定不同的查詢。 換句話說,我必須指定兩個或更多的查詢取決於一個字段是否爲空,對嗎?我怎樣才能做到這一點? 如何修改查詢以接受NULL值? 查看查詢請 真的感謝所有 –

+0

你可以用'Choice'路由器爲http://www.mulesoft.org/documentation/display/current/Routing+Message+Processors#RoutingMessageProcessors-Choice –

+0

有沒有更聰明的方法來允許MEL在選擇路由器中接受構建大量數據庫組件的NULL值? –