참조 객체 검색

    이번에는 객체명을 입력하면 해당 객체를 참조하고 있는 객체 목록을 출력하는 프로시저를 만들어 보자. 이전 소스검색과 다른 점은 소스 검색의 경우 객체명 뿐만 아니라 변수명, 상수명 등 프로그램 소스에 포함된 모든 문자나 문자열을 검색할 수 있지만 지금 만들 프로그램은 USER_DEPENDENCIES 뷰를 참조해 해당 객체를 참조하는 또 다른 객체 목록을 출력하는 object_search_prc라는 프로시저다. 지금부터는 패키지 선언부와 이미 만든 프로그램 소스는 지면 관계상 생략하겠지만, 패키지를 컴파일할 때는 선언부 뿐만 아니라 패키지 본문 전체를 컴파일 해야 한다는 점은 잊지 말자. 그럼 object_search_prc를 만들어 보자.

    입력

        CREATE OR REPLACE PACKAGE BODY my_util_pkg IS
        ...
        ...
    
          -- 객체 검색 프로시저
          PROCEDURE object_search_prc (ps_obj_name IN VARCHAR2)
          IS
            vs_search VARCHAR2(100);
            vs_name   VARCHAR2(1000);
          BEGIN
            -- 찾을 키워드 앞뒤에 '%'를 붙인다.
            vs_search := '%' || NVL(ps_obj_name, '%') || '%';
    
            -- referenced_name 입력된 키워드로 참조객체를 검색한다.
            -- user_dependencies에는 모두 대문자로 데이터가 들어가 있으므로 UPPER 함수를 이용해 검색한다.
            FOR C_CUR IN ( SELECT name, type
                             FROM user_dependencies
                            WHERE referenced_name LIKE UPPER(vs_search)
                            ORDER BY name, type
                          )
            LOOP
               -- 프로그램 이름과 줄번호를 가져와 출력한다.
               vs_name := C_CUR.name || ' - ' || C_CUR.type ;
               DBMS_OUTPUT.PUT_LINE( vs_name);
            END LOOP;
          END object_search_prc;
        END my_util_pkg;
    

    결과

        PACKAGE BODY MY_UTIL_PKG이(가) 컴파일되었습니다.
    

    USER_DEPENDENCIES 뷰의 name은 참조 객체명, type은 참조 객체 타입, referencced_name은 참조당하는 객체명이므로 referencced_name 컬럼을 참조해 검색하고 있다. 그럼 이번에도 부서 테이블을 참조하는 객체명을 출력해 보자.

    입력

        BEGIN
          my_util_pkg.object_search_prc ('departments');
        END;
    

    결과

        CH13_COL_PKG - PACKAGE BODY
        CH13_CUR_PKG - PACKAGE
        CH13_CUR_PKG - PACKAGE BODY
        CH13_EMP_PROC - PROCEDURE
        CH14_COL_PKG - PACKAGE BODY
        ...
        ...
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.