본문 바로가기

데이터베이스/SQL & PL/SQL

[SQL] 동의어, SYNONYM!


 다들 영어를 배우다 보면 한단어에 같은 영단어를 엮어서 많이 외웠을텐데요,
이를 동의어(Synonym)라고 합니다. 철자와 발음은 비록 다르지만 동일한 의미에서 쓰이죠.

 데이터베이스에서도 동의어(보통 '시노님'이라고 부릅니다. 이하 시노님)가 쓰이는데요, 객체(Object)에게 Alias 기능을 부여합니다.
보통 테이블 명이 스키마명과 합쳐져서 길어지는 경우에, 원하는 문자열로 시노님이 구성이 가능한데요.

 가령 예를 들면, hr.employees 를 emp 로 시노님을 등록해놓으면 다음에 hr.employees를 사용할때 간단히 emp로 불러들일 수 있습니다.
시노님을 만들기 전에 체크해야할 권한은 해당테이블에 대한 SELECT권한과, 시노님 생성 권한이 있어야 합니다.

 권한 부여와 관련해서는 다음 링크에서 확인 가능합니다.
1. 시스템 권한에 관한 글 확인하기
2. 객체 권한 관한 글 확인하기


 다음과 같이 시노님을 생성할 수 있습니다.
SQL> CREATE (OR REPLACE) (PUBLIC) SYNONYM (스키마.)시노님명 FOR 스키마.대상객체;
 괄호안의 키워드는 생략 가능합니다. 

 그렇다면 위의 hr.employees 의 시노님 emp는 다음과 같이 만들 수 있겠군요.
hr계정으로 접속했다는 가정하에
SQL> CREATE SYNONYM emp FOR hr.employees;

 저는 이전글에서 만든 test 계정에 hr스키마의 employees 테이블에 관한 SELECT 권한과 SYSNONYM 생성권한을 미리 부여했습니다.
그리고 시노님을 만들어 보겠습니다.

[실행화면] 


 성공적으로 만들어 졌으니 한번 이용해봐야겠죠? 역시나 test 계정으로 다음 쿼리를 실행합니다.
SELECT department_id, last_name, first_name, salary
FROM    emp
WHERE  department_id=100;


 위에서 생성한 시노님이 이상없이 실행되는 것을 볼 수 있습니다.
hr스키마에 존재하는 employees 테이블이 가지고 있는 데이터들을 잘 가져온거죠.

 참고로 시노님 생성시에 설정하는 'OR REPLACE' 키워드는 뷰(View)의 그것과 동일하고(동일한 시노님 존재시 덮어쓰기), 'PUBLIC'을 적어주게 되면 모든 사용자가 사용이 가능하도록 합니다. 'PRIVATE'는 반대로 시노님을 생성한 스키마만 사용가능하죠.

 이상 시노님이였습니다 ^^

 

도움 되셨다면 밑의 추천(손가락 표시)과 댓글 부탁드립니다.