ORA-00904: 無效的列名
Cause The column name entered is either missing or invalid.
Action Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #. If it contains other characters, it must be enclosed in double quotation marks. It may not be a reserved word.
原因:列丟失或無效列名。
方案:輸入有效的列名。一個有效的列名必須是以字母開頭,小於30個字符,並且只包含字母、數字或一些特殊的符號$,_,#。如果還包含其它的字符,那麼這段字符必須用雙引號引起來。列名不能是關鍵字。
案例一:創建表時出現的問題
問題描述:
SQL> DESC S_CUSTOMER;
名稱 是否為空? 類型
-----------------------------------------
id NOT NULL NUMBER(7)
name NOT NULL VARCHAR2(50)
phone VARCHAR2(25)
address VARCHAR2(400)
city VARCHAR2(30)
state VARCHAR2(20)
country VARCHAR2(30)
zip_code VARCHAR2(75)
credit_rating VARCHAR2(9)
sales_rep_id NUMBER(7)
region_id NUMBER(7)
comments VARCHAR2(255)
但是當我SELECT的時候總是報錯:
SQL> SELECT ID FROM S_CUSTOMER;
SELECT ID FROM S_CUSTOMER
*
ERROR 位於第 1 行:
ORA-00904: "ID": 無效的標識符
怎麼會這樣呢?
解決方案:ORACLE通過訪問SQL Server的數據庫鏈接時,用select * 的時候字段名是用雙引號引起來的。你創建表的語句加了雙引號的嗎?估計是PD類似的工具創建的腳本吧?
看下面的例子
SQL> create table test ("id" number not null);
表已創建。
SQL> select ID FROM test;
select ID FROM test
*
ERROR 位於第 1 行:
ORA-00904: "ID": 無效的標識符
SQL> select id from test;
select id from test
*
ERROR 位於第 1 行:
ORA-00904: "ID": 無效的標識符
SQL> desc test;
名稱 是否為空? 類型
----------------------------------------- -------- ------------
id NOT NULL NUMBER
SQL> select "id" from test;
未選定行
SQL>
案例二:
環境:solaris+oracle
問題:exp時遇到
EXP-00008: ORACLE error 904 encountered
ORA-00904: invalid column name
EXP-00000: Export terminated unsuccessfully
提供的情況:wcs組使用java,所以判斷是java的問題。ora-00904時oracle的一個bug。
所以需要使用errorstack來追蹤錯誤。執行
alter system set events='904 trace name errorstack';
然後到udump下查看trace文件。發現是exu8jbqu這個view的問題。
alter system set events='904 trace name errorstack off';
查看exu8jbqu是否存在:
select owner,object_name,object_type,object_id,status
from dba_objects where object_name='exu8jbqu';
發現存在。重新執行$ORACLE_HOME/rdbms/admin/catexp.sql 創建視圖。
重新執行exp成功。問題解決。