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

ORA-00904「無效識別符」完整解碼:七大經典場景與解法

     編輯:Oracle 資料庫基礎

錯誤本質

ORA-00904: invalid identifier 表示引用的欄位名稱不存在或不合法。合法識別符:以字母開頭、≤30 字元、僅含字母數字與 $ _ #,否須雙引號包裹且區分大小寫,且不可為保留字。

七大實戰案例

案例一:建表時加了雙引號,查詢未加

CREATE TABLE test ("id" NUMBER);
SELECT id FROM test;       -- 錯誤
SELECT "id" FROM test;     -- 正確

原因:雙引號強制保留大小寫,Oracle 預設轉大寫,導致大小寫不匹配。

案例二:EXP 匯出報 ORA-00904,視圖 EXU8JBQU 損壞

ALTER SYSTEM SET EVENTS '904 TRACE NAME ERRORSTACK';
-- 查 trace 確認視圖異常
@$ORACLE_HOME/rdbms/admin/catexp.sql  -- 重建匯出視圖

案例三:匯出同義詞階段失敗

非字符集問題,實為無效同義詞導致。查出並 DROP SYNONYM 即可。

案例四:DB Link 存取 SQL Server 欄位全失效

SELECT "Col_A", "Col_B" FROM "TableXYZ"@dblink;  -- 必須雙引號且大小寫一致

SQL Server 對大小寫敏感,Oracle 預設轉大寫,雙引號保留原貌。

案例五:不查系統表如何知錯誤欄位?

直接在 SQL*Plus 執行 DESC table_name 對照,或啟用 SQL Trace 捕捉失敗語句。

案例六:物件型別成員函數呼叫需表別名

-- 錯誤
SELECT marks.totmarks(marks.m1, marks.m2, marks.m3) FROM stdmarks;
-- 正確
SELECT s.marks.totmarks(s.marks.m1, s.marks.m2, s.marks.m3) FROM stdmarks s;

案例七:DB Link 連 SQL Server,想避免雙引號

修改 SQL Server 校對規則為不區分大小寫(CI),則 MyTable = MYTABLE,免去雙引號困擾。

避坑清單

  1. 建表、建視圖、建同義詞**勿加雙引號**,除非極度必要。
  2. 跨異構 DB Link 查詢,**一律雙引號 + 精確大小寫**。
  3. 匯出前跑 catexp.sql 確保系統視圖完整。
  4. 定期清理無效同義詞:SELECT * FROM dba_synonyms WHERE table_owner NOT IN (SELECT username FROM dba_users)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved