好久沒來這裡寫東西了,一直忙著修改系統的Bug和準備考試。大部分時間都用來學習專案管理的知識,新技術也研究和應用的少了,都不知道寫點什麼東西可好,也沒有要寫的東西了。
正好這幾天在修改Bug過程中遇到了一個棘手的問題,資料庫採用的是Oracle 10g,應用伺服器的資料庫用戶端是Oracle 9i。串連資料庫是採用OleDb驅動方式,伺服器上必須要安裝Oracle的Oledb驅動補丁,否則就會出錯,之前也是因為沒安裝這個驅動,遇到了很大麻煩,也花費了好多精力去解決問題。
在一個功能中需要調用預存程序,返回過程處理結果,沒有其它任何操作,跟蹤執行到ExecuteNonQuery();時,就會執行異常處理,預存程序完全正確,顯示錯誤如下:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: At PUBLISH_ORG_MONTHLY, line 291
ORA-01461: can bind a LONG value only for insert into a LONG Column
ORA-06512: at line 1
之前也找了各種方法解決都沒有成功,還以為是因為Oracle版本不一致,或者ODAC1020221-OLEDB驅動補丁不一致的原因造成,迫於無奈,把Oracle 9i卸了,重新裝了10g和驅動補丁,結果調用預存程序操作還是不通過。
沒辦法了,下班時間也到了,第二天在解決吧。好像早上一來,頭腦也清醒了許多,就檢查了一下代碼中給預存程序傳遞參數的代碼,發現參數名稱和預存程序裡是一致的,驚訝的還發現有個參數順序和預存程序裡的不一致,然後就立馬調整順序,結果就執行通過了。
心裡的一塊石頭總算是放下了,因為系統25號就要上線呀,不解決這幾天日子可都不好過~~~
這也算是一個經驗吧,拿出來與大家共同分享,也提醒自己以後別在犯類似的錯誤,這樣可以節省好多精力。