Oracle에서 Synonym은 Oracle 객체(Table, View, Sqeuence, Procedure 등)에 대체되는 이름을 말합니다.
Synonym은 다른 사용자의 객체를 참조할 때 많이 사용합니다. 다른 사용자의 객체를 참조할 경우, Synonym을 생성해서 사용하면 추후 참조하고 있는 객체가 이름을 바꾸거나 이동할 경우 객체를 사용하는 모든 SQL문을 수정하는 것이 아니라 Synonym 만 다시 정의하여 사용할 수 있습니다.
또한 Synonym은 객체의 이름이 길거나 어려운 경우 사용하기 편리한 짧은 이름을 주어 SQL 코딩을 단순화할 수 있습니다. 객체의 소유나 권한을 제한하는 데도 사용되어 Synonym을 사용하려면 이름만 알면 사용할 수 있습니다.
1. Synonym 문법
synonym을 생성 및 삭제 하는 기본 문법은 아래와 같습니다.
-- synonym 생성
CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명
FOR [스키마명.]객체명;
-- synonym 삭제
DROP [PUBLIC] SYNONYM [스키마명.]시노님명;
2. Synonym 생성 및 삭제
-- Synonym 생성 : ora_user로 작업
CREATE OR REPLACE SYNONYM syn_channel FOR channels;
CREATE OR REPLACE PUBLIC SYNONYM syn_channel FOR channels;
-- Synonym 생성 확인
SELECT * FROM all_synonyms
WHERE table_name = 'CHANNELS';
PUBLIC synonym과 PRIVATE synonym은 구별됩니다.
위 생성 결과를 보면 synonym 이름이 같은 것을 확인할 수 있습니다.
따라서 삭제할 때의 SQL문도 PUBLIC과 PRIVATE를 구별하여 작성해야 합니다.
DROP SYNONYM syn_channel;
DROP PUBLIC SYNONYM syn_channel;
만약 PUBLIC을 명시하지않고 PUBLIC synonym을 삭제하거나,
PRIVATE synonym을 PUBLIC을 명시하고 삭제하려고 하면, 이미 삭제된 경우 아래와 같은 오류가 발생합니다.
ORA-01432: public synonym to be dropped does not exist 오류
ORA-01434: private synonym to be dropped does not exist 오류
ORA-01432: 삭제할 공개 동의어가 존재하지 않습니다
01432. 00000 - "public synonym to be dropped does not exist"
ORA-01434: 삭제할 비공개 동의어가 존재하지 않습니다
01434. 00000 - "private synonym to be dropped does not exist"
위의 오류가 발생한다면 synonym이 PRIVATE 인지 PUBLIC 인지 확인하고 다시 시도해 보면 됩니다.
'Dev. Cookbook > SQL, Oracle, MariaDB' 카테고리의 다른 글
[Oracle] ORA-08002: 시퀀스 xxx.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다 (0) | 2022.05.27 |
---|---|
[Oracle] sys, system 계정 비밀번호 재설정 방법 (0) | 2022.05.24 |
[Oracle] Select count(*), count(1), count(column_name), count(DISTINCT column_name) 차이점 (0) | 2022.05.12 |
[Oracle] Cursor와 ROWCOUNT에 대해 이해하기 (0) | 2022.05.06 |
[Oracle] ORA-01403: 데이터를 찾을 수 없습니다. NO DATA FOUND 에러 해결 방법 3가지 (0) | 2022.05.05 |
댓글