2016年5月23日 星期一

[Oracle]ORA-00904 invalid column name 無效的ID

遇到客戶使用SQL Server創建一個View
使用 Select * From View@DBLink時可以正常查詢
但是指定欄位名稱時
就會報錯ORA-00904 invalid column name 無效的ID

欄位的名稱是TAX_RATE跟TAX_RULE,應該不是保留字(Reserved Word)
使用PL SQL Developer查詢時發現這兩個欄位變成小寫(View裡是大寫)
於是死馬當活馬醫
把SQL Server創建View的語法,指定欄位為"TAX_RATE"跟"TAX_RULE"
在Oracle環境下就可以正常查詢了

關於Column在Oracle是有限制的,條件如下
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.

所以Create Table時如果有用到關鍵字需要用雙引號標起來,不然會報錯
create table t
 (  "USER"      VARCHAR2(10)   )
查詢的時候也有影響
SQL> show user
User is "phoenix"

SQL> insert into t values('abc');
1 row inserted

SQL> select * from t;
USER
----------
abc

SQL> select user from t;
USER
------------------------------
PHOENIX

SQL> select user,"USER" from t;
USER                           USER
------------------------------ ----------
PHOENIX                        abc

另外Oracle傾向於將Column字母轉換爲大寫字母,SQL Server則對大小寫更加敏感。
這就是最有可能造成ORA-00904 invalid column name的原因。

其他狀況可參考 http://tc.wangchao.net.cn/bbs/detail_1775447.html

沒有留言:

張貼留言