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