oracle 同義詞(synonym)
1.為啥要用同義詞:
同義詞,顧名思義就是兩個詞的意思一樣,可以互相替換.那它的作用有哪些呢:
a一個最明顯的目的就是簡化sql.如果某個資料庫物件的名字太長了,可以建立一個短一點的同義詞.就相當於是縮寫唄.
b.另外一個目的是隱藏一些物件的資訊.比如查詢另一個 schema中的某個表,需要在表名前加schema名做為字首.如果建立一個同義詞就可以隱藏schema資訊.
2.怎麼建立同義詞.
語法:CREATE [OR REPLACE] [PUBLIC] SYNONYM synonym_name FOR [schema.]object
1.建立私有同義詞:
例如:CREATE SYNONYM arwen FOR table_of_arwen
這樣使用select * from arwen或select * from table_of_arwen是一樣的.
刪除同義詞:DROP SYNOYM arwen.
注意:私有同義詞只有建立它的使用者自己可以用.如果其他schema要用必須得加建立者schema為字首.這和其他物件是一樣的.
2.建立公共同義詞:
CREATE PUBLIC SYNONYM arwen FOR table_of_arwen
所有的schema都能使用公共同義詞.比如schema scott訪問schema arwen的表table_of_arwen就可以用select * from arwen
有些人可能會奇怪這種情況為啥就不用到schema做字首了.可能系統預設加了吧.
所以CREATE PUBLIC SYNONYM arwen FOR table_of_arwen或CREATE PUBLIC SYNONYM arwen FOR arwen.table_of_arwen是等效的.
其他schema都能用arwen去查詢.
注意:如果其他schema沒有許可權查詢表table_of_arwen則 也不能使用它的同義詞去查詢的.
3.關於錯誤:同義詞轉換不再有效.
當建立同義詞時不會檢查同義詞代表的物件是否存在,都會成功建立.比如CREATE PUBLIC SYNONYM arwen FOR no_table_exist
假如不存在一個表叫no_table_exist或者其他資料庫物件叫這名.
則SELECT * FROM arwen時就會有錯誤提示:同義詞轉換不再有效.當然如果本來有那表後面刪除了也會有同樣的錯誤.
3.和同義詞類似的別名
oracle裡面還有個概念叫別名.它和同義詞功能類似.只不過使用範圍很小.主要用在一個sql語句中,只能臨時起作用.像臨時變數一樣.
例如:
SELECT emp.ename,bonus.sal FROM emp ,bonus where emp.ename = bonus.ename
我們可以給emp取一個別名e,bonus取b列也取別名則查詢語句如下
SELECT e.ename AS myname,b.sal AS mysal FROM emp e,bonus b WHERE e.ename = b.ename
裡面的關鍵字AS是可選的,如果去掉也會實現同樣的功能.在列中可用AS,但給表取別名是不能加的.