標籤:
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,但給表取別名是不能加的.
oracle同義字 轉