2010/10/08

Oracle 的編碼問題

  今天遇到的這個問題如果不記錄下來,真的是對不起我自己!因為我又黑掉了,上個月的批次問題使用單位已經不Happy了!昨天系統上新的資料庫程式又出包了.

  進入正題!其實昨天在上新程式時使用 sqlplus 將廠商給的 function source code 加入 DB 時發現看不懂的錯誤訊息.DBA 也看不出問題點,因為直接看 source code 內容很正常,但就是 compile 無法成功.將 script 貼到 TOAD 中竟然就好了.那知道今天早上批次一執行就掛了.Oracle 吐出來的錯誤訊息如下:

ORA-06550: 第 1 行, 第 75 個欄位: PL/SQL: ORA-00933: SQL 命令的結束有問題 ORA-06550: 第 1 行, 第 8 個欄位: PL/SQL: SQL Statement ignored

  明明上程式後DBA有確認所有的 Stored Procedure , function 及一些 object 都正常且沒有 invalid object 的問題.廠商來查也看不出任何問題,因為重新執行批次是正常,那就怪了! 真的是滿腦子的問號 ????????

  後來回想到上程式的問題,再回頭檢視幾支 script 檔發現,有一支檔案大小特別大,打開一看也才不到30行,竟然有 4K,和其它檔案都是 1 K 的實際行數也沒差幾行.再看檔名,才發現好像是昨天出問題那一個.再用 Windows 的 記事本 (NotePad) 打開,執行另存新檔時看到對話盒中的編碼竟然是UNICODE ,這下子凶手抓到了 !

  問題還沒結束,因為心中還是充滿一堆問號.為何 TOAD 可以成功將 UNICODE 編碼的 function source code 編譯成功,但 Oracle 自己在執行該 function 時卻時好時壞 ?

  結論是請 DBA 再用 sql plus 將 ANSI 編碼的 function source code 再重編譯一次.但下次還是要記得用 sql plus 上新程式,免得吃 Oracle 的悶虧 ! 更 .....................