首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

解決 Delphi 呼叫 Oracle Stored Procedure 發生 ORA-01003: no statement parsed

     編輯:Oracle 教學

解決 Delphi 呼叫 Oracle Stored Procedure 發生 ORA-01003: no statement parsed

Delphi 5 使用 BDE (Borland Database Engine) 透過 TStoredProc 元件呼叫 Oracle 10g 預存程序時,遭遇 ORA-01003: no statement parsed。經驗證,根因在於 StoredProcName 屬性指定的程序名必須全大寫,且參數名需與資料庫定義完全一致 (含大小寫)。

一、錯誤環境與現象

  • 開發工具:Delphi 5 (Enterprise)
  • 資料存取層:BDE (Borland Database Engine) + Oracle 10g Client
  • 元件:TStoredProc
  • 錯誤:執行 StoredProc.ExecProc 時拋出 ORA-01003: no statement parsed。

二、解決方案

  1. StoredProcName 全大寫:
    StoredProc1.StoredProcName := 'MYPACKAGE.MYPROCEDURE';  -- 必須全大寫
    -- 錯誤寫法:
    StoredProc1.StoredProcName := 'MyPackage.MyProcedure';  -- 混合大小寫導致解析失敗
  2. 參數名完全匹配:
      項目規範說明
      StoredProcName全大寫,含 Schema/Package'SCOTT.MYPKG.MYPROC'
      參數名全大寫,與資料庫定義一致設計時期屬性編輯器直接輸入大寫
      參數順序與資料庫定義順序一致BDE 依位置綁定,順序錯誤導致值錯位
      資料型別對應Oracle NUMBER → ftInteger/ftFloat/ftBCD
    VARCHAR2 → ftString
    DATE → ftDateTime避免型別轉換溢出/截斷 例外處理Try...Except 捕獲 EDBEngineError讀取 Errors[0].Message 獲取 ORA-xxxxx 詳細碼

    五、延伸:其他開發環境參考

    • .NET (ODP.NET):OracleCommand.CommandText = "MYPKG.MYPROC" (大小寫不敏感),參數用 : 前綴 (:P_EMPNO)。
    • Java (JDBC):{call MYPKG.MYPROC(?, ?)},參數用 setInt(1, ...) 位置綁定或 registerOutParameter。
    • Python (cx_Oracle):cur.callproc('MYPKG.MYPROC', [123, cur.var(str)])。

    結論:Delphi 5 + BDE 是歷史遺留組合,新專案強烈建議遷移至 FireDAC (原生支援 Oracle、大小寫不敏感、功能更豐富) 或 .NET/Java 現代技術棧。若必須維護舊系統,請嚴守「全大寫」鐵律並建立自動化測試覆蓋所有預存程序呼叫路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved