?????????今天客戶打電話過來,說程序沒有正常運行,收益率等數據沒有計算出來.打開tomcat的日志發(fā)現(xiàn),在執(zhí)行一條insert語句時發(fā)生了null值的錯誤.經過一番跟蹤和調試,終于找到闖禍的元兇--一個用來取得編號的函數,但是這個函數已經在很多客戶處使用了,都沒有錯,為什么偏偏在這里出錯了呢?在網上google一通后,才發(fā)現(xiàn)在對數據庫有寫操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函數,是無法簡單的用SQL來調用的.這種錯誤通常發(fā)生在低版本的Oracel中.
?????????原因找到了,解決起來就簡單了.一般有2種解決方法:一、在函數外面套一個存儲過程;二、使用自治事務(AUTONOMOUS TRANSACTION).第一種方法比較愚蠢且沒有技術含量不太符合偶的審美觀故pass.
第二種使用起來就很簡單了:只需下列PL/SQL的聲明部分加上PRAGMA AUTONOMOUS_TRANSACTION
就可以了.
?????????果然加上這句話后一切OK,世界又太平了.