Oracle 原理: 公有同义词 和 私有同义词
同義詞是現有對象的一個別名,和 C++ 里面的typedef關鍵字很像。同義詞都能簡化SQL語句,隱藏對象的名稱和所有者,也可以提供對對象的公共訪問。?在Oracle中,同義詞分為公有同義詞和私有同義詞。公有同義詞可被所有數據庫用戶訪問。私有同義詞只能再其模式內訪問,且不能與當前模式的對象同名。
CREATE? [PUBLIC]?SYNONYM ?[同義詞名] FOR [對象名];
如果不寫 PUBLIC 那創建的同義詞就是私有同義詞,寫了 PUBLIC 就是公有同義詞。
創建同義詞需要權限
GRANT CREATE? [PUBLIC]?SYNONYM TO [用戶名]
刪除同義詞(刪除同義詞也是需要權限的)
DROP? [PUBLIC]?SYNONYM? [同義詞名];
替換同義詞(要權限):
CREATE OR REPLACE SYNONYM ?[新同義詞名] FOR [對象名];
私有同義詞,由于每個模式私有的,可以在不同模式中創建同名的私有同義詞,互不影響;
?
-------創建表結構 create table salary_tbl(employer_nm varchar(20),department varchar(20) not null,salary number not null,leader_nm varchar(20) ); -----插入測試數據---- truncate table salary_tbl; beginfor i in 1..100loopinsert into salary_tbl values('雇傭者'||i,'部門'||Mod(i,6),100*POWER(10000,i*0.01),'雇傭者'||Mod(i,6)); end loop; end; / commit; --------創建私有同義詞--------- CREATE SYNONYM s_tbl FOR SALARY_TBL; --------用私有同義詞來查詢----------- select * from s_tbl s where s.employer_nm ='雇傭者1'; --------刪除私有同義詞---------- DROP SYNONYM s_tbl;我們知道查找表信息可以用如下SQL:?select * from tab; 那么這里 tab 是表名嗎?
我可以查看對象表,來查找對象信息
select * from all_objects where object_name='TAB';可以看見 TAB 這個對象在SYS里是一個視圖,而在公共里是一個同義詞,這里的TAB并不是一張表;
我們可以查看同義詞信息:
select * from all_synonyms where SYNONYM_NAME='TAB';我們可以看見不管OWNER是 公共還是SYSTEM,TAB同義詞對應的都是SYS模式(用戶)下的TAB表;
select * from tab ; 是根據同義詞查找 ,和查詢表 select * from sys.tab; 是一樣的
?
總結
以上是生活随笔為你收集整理的Oracle 原理: 公有同义词 和 私有同义词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle原理:表分区
- 下一篇: Oracle 原理:序列