Delphi 5 使用 BDE (Borland Database Engine) 透過 TStoredProc 元件呼叫 Oracle 10g 預存程序時,遭遇 ORA-01003: no statement parsed。經驗證,根因在於 StoredProcName 屬性指定的程序名必須全大寫,且參數名需與資料庫定義完全一致 (含大小寫)。
TStoredProcStoredProc.ExecProc 時拋出 ORA-01003: no statement parsed。StoredProc1.StoredProcName := 'MYPACKAGE.MYPROCEDURE'; -- 必須全大寫 -- 錯誤寫法: StoredProc1.StoredProcName := 'MyPackage.MyProcedure'; -- 混合大小寫導致解析失敗
項目 規範 說明 StoredProcName 全大寫,含 Schema/Package 'SCOTT.MYPKG.MYPROC'參數名 全大寫,與資料庫定義一致 設計時期屬性編輯器直接輸入大寫 參數順序 與資料庫定義順序一致 BDE 依位置綁定,順序錯誤導致值錯位 資料型別對應 Oracle NUMBER → ftInteger/ftFloat/ftBCD
VARCHAR2 → ftString
DATE → ftDateTime避免型別轉換溢出/截斷 例外處理 Try...Except 捕獲 EDBEngineError 讀取 Errors[0].Message 獲取 ORA-xxxxx 詳細碼 五、延伸:其他開發環境參考
OracleCommand.CommandText = "MYPKG.MYPROC" (大小寫不敏感),參數用 : 前綴 (:P_EMPNO)。{call MYPKG.MYPROC(?, ?)},參數用 setInt(1, ...) 位置綁定或 registerOutParameter。cur.callproc('MYPKG.MYPROC', [123, cur.var(str)])。結論:Delphi 5 + BDE 是歷史遺留組合,新專案強烈建議遷移至 FireDAC (原生支援 Oracle、大小寫不敏感、功能更豐富) 或 .NET/Java 現代技術棧。若必須維護舊系統,請嚴守「全大寫」鐵律並建立自動化測試覆蓋所有預存程序呼叫路徑。