1. 程式人生 > >oracle 同義詞(synonym)

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,但給表取別名是不能加的.