database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41342 게시물 읽기
No. 41342
Synonym 삭제 질문 SQL 문의
작성자
검콤이(검콤이)
작성일
2017-02-24 14:21:32
조회수
857

 안녕하세요.

Invalid 된 Synonym 중에 참조하는 Object가 있음면 재생성해주고 없으면 삭제하는 쿼리를 만드는 중입니다.

 

원하는 결과는 아래처럼 나오는 것인데요

 

 

COMPAME_DDL TOAD_PLAN_TABLE INVALID COMPAME TOAD_PLAN_TABLE DROP SYNONYM COMPAME_DDL.TOAD_PLAN_TABLE;
COMPAME_DML TOAD_PLAN_TABLE INVALID COMPAME TOAD_PLAN_TABLE DROP SYNONYM COMPAME_DML.TOAD_PLAN_TABLE;
COMPAME_SEL TOAD_PLAN_TABLE INVALID COMPAME TOAD_PLAN_TABLE DROP SYNONYM COMPAME_SEL.TOAD_PLAN_TABLE;
COMPWEB TOAD_PLAN_TABLE INVALID COMPAME TOAD_PLAN_TABLE DROP SYNONYM COMPWEB.TOAD_PLAN_TABLE;
KMRMSBT_DDL F_GET_INST_BZ_REG_NO_01 INVALID KMRMSBT F_GET_INST_BZ_REG_NO_01 CREATE OR REPLACE SYNONYM KMRMSBT_DDL.F_GET_INST_BZ_REG_NO_01 FOR KMRMSBT.F_GET_INST_BZ_REG_NO_01;
KMRMSBT_DDL F_GET_INST_BZ_REG_NO_02 INVALID KMRMSBT F_GET_INST_BZ_REG_NO_02 CREATE OR REPLACE SYNONYM KMRMSBT_DDL.F_GET_INST_BZ_REG_NO_02 FOR KMRMSBT.F_GET_INST_BZ_REG_NO_02;
KMRMSBT_DML F_GET_INST_BZ_REG_NO_01 INVALID KMRMSBT F_GET_INST_BZ_REG_NO_01 CREATE OR REPLACE SYNONYM KMRMSBT_DML.F_GET_INST_BZ_REG_NO_01 FOR KMRMSBT.F_GET_INST_BZ_REG_NO_01;
KMRMSBT_DML F_GET_INST_BZ_REG_NO_02 INVALID KMRMSBT F_GET_INST_BZ_REG_NO_02 CREATE OR REPLACE SYNONYM KMRMSBT_DML.F_GET_INST_BZ_REG_NO_02 FOR KMRMSBT.F_GET_INST_BZ_REG_NO_02;
KMRMSBT_SEL F_GET_INST_BZ_REG_NO_01 INVALID KMRMSBT F_GET_INST_BZ_REG_NO_01 CREATE OR REPLACE SYNONYM KMRMSBT_SEL.F_GET_INST_BZ_REG_NO_01 FOR KMRMSBT.F_GET_INST_BZ_REG_NO_01;
KMRMSBT_SEL F_GET_INST_BZ_REG_NO_02 INVALID KMRMSBT F_GET_INST_BZ_REG_NO_02 CREATE OR REPLACE SYNONYM KMRMSBT_SEL.F_GET_INST_BZ_REG_NO_02 FOR KMRMSBT.F_GET_INST_BZ_REG_NO_02;

 

 

제가 작성한 쿼리는 아래와 같습니다

 

 

                ,A.SYNONYM_NAME

                ,B.STATUS

                ,A.TABLE_OWNER

                ,A.TABLE_NAME

                ,CASE WHEN B.OWNER = A.TABLE_OWNER

                THEN 'CREATE OR REPLACE SYNONYM ' ||A.OWNER||'.'||A.SYNONYM_NAME|| ' FOR ' ||A.OWNER||'.'||A.TABLE_NAME||';'

                ELSE 'DROP SYNONYM ' ||A.OWNER||'.'||A.SYNONYM_NAME||';'

                END

FROM DBA_SYNONYMS A LEFT OUTER JOIN DBA_OBJECTS B

ON A.SYNONYM_NAME = B.OBJECT_NAME

WHERE B.STATUS='INVALID'

AND B.OBJECT_TYPE='SYNONYM'

AND A.OWNER = B.OWNER

 

여기까진 작성을 해보았고.. 당연히 왜 안되는지는 알겠는데..

어떻게 고쳐야 할지를 모르겠네요..

도움주실분 계신가요ㅠㅠ

 

 

이 글에 대한 댓글이 총 1건 있습니다.

 답변 감사드립니다..

허나..

참조하는 Object는 테이블이 아닌 Function 이나 Procedure 가 될수도 있고..

일단 답변 주신 쿼리를 돌려보면 갯수도 맞지 않고.. 결과가 정 반대로 나오네요ㅠㅠ

지워야 될것이 Create~ 로 나오고 생성해야될게 Drop 으로 나옵니다 ㅠㅠ

검콤이(검콤이)님이 2017-02-27 09:28:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41346도로주소 매핑테이블 업데이트시 애로사항입니다. [1]
기쁨이
2017-03-03
730
41345Oracle 동작중에.. 12152, 3114, 3113 error 가 나옵니다.. [1]
이현석
2017-03-02
611
41344lgwr 트레이스파일을 Insert 하는 방법이 있을까요 [8]
검콤이
2017-02-28
780
41342Synonym 삭제 질문 SQL 문의 [1]
검콤이
2017-02-24
857
41341회사 DB 개인용 백업 질문입니다 [3]
구영곤
2017-02-22
797
41340ORACLE DB에서 MS-SQL Procedure 호출 관련 문의
원성희
2017-02-22
739
41339질문) Linux (CentOS6.6) - Oracle 스크립트 사용하는방법 [2]
우가가
2017-02-21
684
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.076초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다