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