더북(TheBook)

참조 객체 검색

이번에는 객체명을 입력하면 해당 객체를 참조하고 있는 객체 목록을 출력하는 프로시저를 만들어 보자. 이전 소스검색과 다른 점은 소스 검색의 경우 객체명 뿐만 아니라 변수명, 상수명 등 프로그램 소스에 포함된 모든 문자나 문자열을 검색할 수 있지만 지금 만들 프로그램은 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
    ...
    ...
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.