SQL同義詞使用


Oracle 同義詞理解及使用

  • 什么是同義詞

    從字面上理解,同義詞其實就是一個別名,類似於視圖,是一種映射關系。同義詞可分為私有同義詞和公有同義詞兩類。

  • 私有同義詞:一般為普通用戶自己建立的同義詞,創建該同義詞需要create synonym權限。該類同義詞一般在創建用戶的模式內使用,若其它用戶想使用的話,需要以創建用戶的用戶名作為前綴。

    -- 創建語法
    create synonym 同義詞名 for 表名;
    -- 刪除同義詞
    drop synonym 同義詞名;
    
  • 公有同義詞:一般由DBA進行創建,所有用戶都可以使用,創建該同義詞需要create public synonym權限。該類同義詞並非模式的對象,屬於各模式通用。

    -- 創建語法
    create public synonym 同義詞名 for 表名;
    -- 刪除同義詞
    drop public synonym 同義詞名;
    
  • 注意點

    • 當公有同義詞與私有同義詞同名時,私有同義詞優先。
    • 同義詞指向的對象被刪除后,同義詞依然存在,再次以原來的對象名創建后,同義詞依舊可用。

創建同義詞

  1. 創建某個用戶下同義詞

用sys賬號給DM賬號賦予CREATE SYNONYM的權限。假設user_temp是你要建同義詞的用戶。

GRANT CREATE SYNONYM TO user_temp; 

這個時候你創建同義詞的時候,如果找不到你要管理的user_res用戶下的表tableA。(注:要在user_temp用戶下創建user_res用戶下tableA表的同義詞)

這個時候還需要一個權限就是user_temp用戶select tableA的權限,這個時候是在user_res用戶下賦值的:

grant select on tableA to user_temp;  

在user_temp用戶下創建同義詞:

create or replace synonym tableA for user_res.tableA;
  1. 創建公共同義詞:
CREATE OR REPLACE PUBLIC SYNONYM tableA for user_res.tableA; 

同義詞循環鏈解決方式

錯誤代碼:ORA-01775

查看表的同義詞

SELECT * FROM ALL_SYNONYMS where table_name = 'XXXX';

查找當前用戶是否存在循環的同義詞:

select * from dba_synonyms where table_owner='XXXX' and synonym_name<>table_name;

查找同義詞沒有對象的數據庫對象

select *  from dba_synonyms where table_owner = 'XXXX' and synonym_name in 

(select a.synonym_name from dba_synonyms a where a.table_owner = 'XXXX' minus select object_name from user_objects);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM