Java 應用調用 Oracle 時拋出 java.sql.SQLException,錯誤碼映射至 ORA-XXXXX。本文匯總 30+ 高頻錯誤碼,提供中文含義、典型觸發場景、排查方向,開發、測試、運維必備速查表。
| 錯誤碼 | 中文含義 | 典型場景 | 排查方向 |
|---|---|---|---|
| ORA-00904 | 無效列名 | SQL 拼寫錯誤、列不存在、別名引用錯誤 | 檢查列名大小寫、雙引號、Schema 前綴 |
| ORA-00942 | 表或視圖不存在 | 表名錯誤、權限不足、Synonym 失效 | SELECT * FROM all_tables WHERE table_name=... 驗證 |
| ORA-01400 | 不能插入 NULL | 非空列插入 NULL、隱式轉換失敗 | 檢查 DDL NOT NULL、默認值、觸發器 |
| ORA-00936 | 缺少表達式 | SELECT 列表為空、子查詢語法錯誤 | 補全 SELECT 列、檢查括號匹配 |
| ORA-00933 | SQL 命令未正確結束 | 多餘分號、關鍵字拼寫、子查詢未閉合 | 簡化 SQL 逐步驗證 |
| ORA-01722 | 無效數字 | 字符串隱式轉數字失敗、數據髒值 | TO_NUMBER 顯式轉換、數據清洗 |
| ORA-06530 | 訪問空對象屬性 | 未初始化 OBJECT TYPE 變量直接賦值 | 先構造實例 obj := type_name(...) |
| ORA-06592 | CASE 分支未匹配 | CASE 無 ELSE 且 WHEN 全不滿足 | 添加 ELSE 分支或覆蓋所有分支 |
| ORA-06531 | 集合未初始化 | 嵌套表/VARRAY 未構造直接操作 | 先 coll := type_name() 初始化 |
| ORA-06511 | 游標已打開 | 重複 OPEN 同一游標、FOR 循環中隱式 OPEN | 先 CLOSE、使用隱式游標 FOR LOOP |
| ORA-00001 | 唯一約束違反 | 主鍵/唯一索引重複值 | 業務邏輯去重、MERGE/UPSERT |
| ORA-01001 | 無效游標 | 關閉未打開游標、游標超出作用域 | 檢查 OPEN/FETCH/CLOSE 配對 |
| ORA-01017 | 登錄被拒 | 用戶名/密碼錯誤、密碼過期、帳號鎖定 | 驗證憑證、檢查 PROFILE 策略 |
| ORA-01403 | 未找到數據 | SELECT INTO 返回 0 行 | 改用游標或異常捕獲 NO_DATA_FOUND |
| ORA-01012 | 未登錄 | 會話已斷開發起 DB 調用 | 連接池驗證查詢、重連機制 |
| ORA-06501 | 程序內部錯誤 | PL/SQL 引擎 Bug、內存損壞 | 收集 Trace、升級 Patch Set |
| ORA-06504 | 行類型不匹配 | 游標變量賦值類型不兼容 | 對齊強/弱類型游標定義 |
| ORA-30625 | SELF 為空 | 調用 Member Method 於 NULL 實例 | 調用前非空判斷 |
| ORA-06500 | 存儲錯誤 | PGA 耗盡、內存碎片 | 優化集合大小、增加 PGA_AGGREGATE_TARGET |
| ORA-06533 | 下標超出集合計數 | 索引 > 集合元素數 | 邊界檢查 i <= coll.COUNT |
| ORA-06532 | 下標超出合法範圍 | 負數索引、過大索引 | 索引範圍驗證 |
| ORA-01410 | 無效 ROWID | 字符串轉 ROWID 失敗 | 使用 DBMS_ROWID 包驗證 |
| ORA-00051 | 資源等待超時 | 鎖等待、I/O 擁塞 | V$SESSION_WAIT、V$LOCK 分析 |
| ORA-01422 | 返回超過一行 | SELECT INTO 返回多行 | 加 LIMIT/ROWNUM、改用游標 |
| ORA-06502 | 值錯誤 | 字符串截斷、精度溢出、轉換失敗 | 變量長度/精度對齊、顯式轉換 |
| ORA-01476 | 除零錯誤 | 分母為 0 | NULLIF(denom,0)、業務邏輯防護 |
-Doracle.jdbc.Trace=true 定位具體 SQLSQLException → 記錄 Error Code、SQL State、完整堆棧、綁定變量值