相當(dāng)于alias(別名),比如把user1.table1在user2中建一個(gè)同義詞table1
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、微信小程序開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立10余年以來,已經(jīng)為上千余家成都濕噴機(jī)各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的上千余家客戶與我們一路同行,見證我們的成長(zhǎng);未來,我們一起分享成功的喜悅。
create synonym table1 for user1.table1;
這樣當(dāng)你在user2中查select * from table1時(shí)就相當(dāng)于查select * from user1.table1;
優(yōu)點(diǎn)自己總結(jié)吧。
例如:
在oracle中對(duì)用戶的管理是使用權(quán)限的方式來管理的,也就是說,如果我們想使用數(shù)據(jù)庫,我們就必須得有權(quán)限,但是如果是別人將權(quán)限授予了我們,我們也是能對(duì)數(shù)據(jù)庫進(jìn)行操作的,但是我們必須要已授權(quán)的表的名稱前鍵入該表所有者的名稱,所以這就是比較麻煩的,遇到這種情況,我們?cè)撛趺崔k呢?創(chuàng)建個(gè)同義詞吧!這樣我們就可以直接使用同義詞來使用表了。
1、 當(dāng)用程序連接或者用plsql查詢同義詞時(shí),如果出現(xiàn)ora-01775:同義詞的循環(huán)鏈這樣的問題。
一般是因?yàn)榇嬖谕x詞,但同義詞沒有相應(yīng)的對(duì)象。
2、 先查有沒有循環(huán)的同義詞。
select * from dba_synonyms
where table_owner='TEST'
and synonym_nametable_name;
沒有記錄。
3、 再查同義詞沒有對(duì)象的數(shù)據(jù)庫對(duì)象
select * from dba_synonyms
where table_owner='TEST'
and
synonym_name in
(select a.synonym_name from dba_synonyms a where a.table_owner='TEST'
minus
select object_name from user_objects)
4、 把查詢出來的結(jié)果進(jìn)行查詢表
select * from DRILL_PRESON
如果該同義詞沒有相應(yīng)的對(duì)象,則會(huì)包ora-01775的錯(cuò)誤
5、 把這個(gè)同義詞刪除
drop public synonym DRILL_PRESON
Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和視圖的功能類似,就是一種映射關(guān)系。它可以節(jié)省大量的數(shù)據(jù)庫空間,對(duì)不同用戶的操作同一張表沒有多少差別;它擴(kuò)展了數(shù)據(jù)庫的使用范圍,能夠在不同的數(shù)據(jù)庫用戶之間實(shí)現(xiàn)無縫交互;Oracle數(shù)據(jù)庫中提供了同義詞管理的功能。同義詞是數(shù)據(jù)庫對(duì)象的一個(gè)別名,經(jīng)常用于簡(jiǎn)化對(duì)象訪問和提高對(duì)象訪問的安全性。在使用同義詞時(shí),Oracle數(shù)據(jù)庫將它翻譯成對(duì)應(yīng)方案對(duì)象的名字。與視圖類似,同義詞并不占用實(shí)際存儲(chǔ)空間,只有在數(shù)據(jù)字典中保存了同義詞的定義
創(chuàng)建同義詞
CREATE SYNONYM SYSN_TEST FOR TEST;
查看同義詞
SELECT * FROM USER_SYNONYMS
使用同義詞
SELECT * FROM SYSN_TEST;
刪除同義詞
DROP SYNONYM SYSN_TEST;
1、私有同義詞
只能被當(dāng)前用戶訪問.
2、公有同義詞
可被所有的數(shù)據(jù)庫用戶訪問.
創(chuàng)建同義詞語法:
create [or replace] [public]
synonym 同義詞名稱
for [用戶名.]對(duì)象名;
注釋:[]中表示可寫、或不寫;[or replace]表示如果已經(jīng)有了你要?jiǎng)?chuàng)建的同義詞就取代/替換原有的同義詞;[public]表示是否把同義詞公有
一、背景
有兩個(gè)sid:Asid,Bsid,在Asid下有兩個(gè)用戶Auser1,Auser2,在Bsid下有一個(gè)用戶Buser1。其中Auser2和Buser1建立了dblink?,F(xiàn)希望通過登錄Buser1訪問Auser1上的三張表table1,table2,table3信息和函數(shù)function1。
二、步驟
①登錄Auser1對(duì)Auser2授權(quán)(若需要?jiǎng)h除則加上)
grant ,select,on table1 to Auser2;
grant ,select,on table2 to Auser2;
grant ,select,on table3 to Auser2;
grant execute on function1 to Auser2;
②登錄Auser2建立同義詞
create synonym table1 for Auser1.table1;
create synonym table2 for Auser1.table1;
create synonym table3 for Auser1.table1;
create synonym function1 for Auser1.function1;
③登錄Buser1查找db_link名(例如查出來的db_link名為mydblink1)
select username,db_link from user_db_links
④建立Buser1的同義詞
create synonym table1 for Auser2.table1@mydblink1;
create synonym table2 for Auser2.table2@mydblink1;
create synonym table3 for Auser2.table3@mydblink1;
create synonym function1 for Auser2.function1@mydblink1;
⑤測(cè)試
此時(shí)登錄Buser1通過select * from table1就可以訪問table1了。
三、注意點(diǎn)
也可以建立procedure的`同義詞,但是這樣執(zhí)行的過程中不允許commit。如果要提交的話請(qǐng)?jiān)谌鏙DBC中commit()。
可以試試CREATE SYNONYM TEST FOR
PCKG_RAF_EFAS_INTERFACE.PROC_GET_ACCESS_TOKEN;
如果不行,可以再自己寫個(gè)存儲(chǔ)過程將這個(gè)調(diào)用存儲(chǔ)過程的部分代碼包起來,對(duì)外邊用戶使用來說,也是一樣的效果。
分享標(biāo)題:oracle同義詞怎么用,oracle添加同義詞
本文網(wǎng)址:http://jinyejixie.com/article48/hsedhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、品牌網(wǎng)站制作、網(wǎng)站導(dǎo)航、云服務(wù)器、App設(shè)計(jì)、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)