遇到客戶使用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
沒有留言:
張貼留言