首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MyBatis 操作 Oracle 報 ORA-00911: invalid character 根因與解決

     編輯:Oracle 資料庫相關知識

MyBatis 執行 Oracle SQL 時拋出 ORA-00911: invalid character,但在 PL/SQL Developer 中執行完全正常。根因極簡單:MyBatis/JDBC 不允許 SQL 結尾分號。

錯誤現象

  • Mapper XML 或註解中 SQL 字串以 ; 結尾
  • Navicat 匯出 SQL 帶分號直接貼上
  • PL/SQL、SQL*Plus 等工具習慣加分號

解決方案

  1. 移除 SQL 字串尾部分號
  2. Mapper XML 範例:
    
    
    
    
    
  3. 註解式映射同理:
    @Select("SELECT * FROM users WHERE id = #{id}") // 無分號
    User findById(@Param("id") Long id);

深度解析

  • JDBC 驅動程式將 SQL 直接送給資料庫引擎解析
  • Oracle 伺服器端解析器不接受分號作為陳述式結束符(工具端負責分割多條 SQL)
  • 分號屬於「無效字元」導致 ORA-00911

預防清單

  1. Mapper XML/註解 SQL 絕不加分號
  2. 從工具複製 SQL 時務必手動移除結尾分號
  3. 多條 SQL 需拆分為多個 Mapper 方法或使用批次處理 API
  4. 單元測試覆蓋所有 Mapper 方法,CI 階段攔截此類低級錯誤

一個分號,浪費半天排查時間——養成「無分號」肌肉記憶最划算。

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