소스 검색

    17장에서 알아봤던 것처럼 함수나 프로시저 등의 프로그램의 소스는 DBMS_SOURCE 뷰를 통해 검색할 수 있다. 따라서 제일 먼저 만들 프로그램은 매개변수로 특정 키워드를 받아 이 키워드가 포함된 소스를 출력하는 program_search_prc라는 프로시저로, USER_SOURCE 뷰의 TEXT 컬럼을 LIKE 연산자를 사용해 조회한 다음 이를 DBMS_OUTPUT.PUT_LINE으로 출력하는 기능을 수행한다.

    입력

        CREATE OR REPLACE PACKAGE my_util_pkg IS
          -- 프로그램 소스 검색 프로시저
          PROCEDURE program_search_prc (ps_src_text IN VARCHAR2);
        END my_util_pkg;
    

    결과

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

    이제 program_search_prc 프로시저가 추가된 my_util_pkg 본문을 만들어 보자.

    입력

        CREATE OR REPLACE PACKAGE BODY my_util_pkg IS
          -- 프로그램 소스 검색 프로시저
          PROCEDURE program_search_prc (ps_src_text IN VARCHAR2)
          IS
            vs_search VARCHAR2(100);
            vs_name   VARCHAR2(1000);
          BEGIN
            -- 찾을 키워드 앞뒤에 '%'를 붙인다.
            vs_search := '%' || NVL(ps_src_text, '%') || '%';
    
            -- dba_source에서 입력된 키워드로 소스를 검색한다.
            -- 입력 키워드가 대문자 혹은 소문자가 될 수 있으므로 UPPER, LOWER 함수를 이용해 검색한다.
            FOR C_CUR IN ( SELECT name, type, line, text
                             FROM user_source
                            WHERE text like UPPER(vs_search)
                               OR text like LOWER(vs_search)
                          ORDER BY name, type, line
                        )
            LOOP
              -- 프로그램 이름과 줄번호를 가져와 출력한다.
              vs_name := C_CUR.name || ' - ' || C_CUR.type || ' - ' || C_Cur.line || ' : ' || REPLACE(C_CUR.text, CHR(10), '');
               DBMS_OUTPUT.PUT_LINE( vs_name);
            END LOOP;
    
          END program_search_prc;
        END my_util_pkg;
    

    결과

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

    그럼 위 프로시저를 사용해 부서 테이블명인 departments를 검색해 보자.

    입력

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

    결과

        CH13_COL_PKG - PACKAGE BODY - 9 : FROM departments
        CH13_CUR_PKG - PACKAGE - 3 : CURSOR pc_empdep_cur ( dep_id IN departments.department_id%TYPE ) IS
        CH13_CUR_PKG - PACKAGE - 5 : FROM employees a, departments b
        ...
        ...
    

    소스를 보면 USER_SOURCE 뷰를 참조하는 커서를 돌리면서 해당 키워드가 들어간 프로그램 이름(name), 프로그램 유형(type), 소스 상의 줄 번호(line)와 프로그램 소스(text)를 DBMS_OUTPUT.PUT_LINE을 이용해 출력하고 있다. 검색할 키워드가 대문자나 소문자로 입력될 수 있으므로 이 두 가지에 대해 UPPER, LOWER 함수를 WHERE 절에 사용한 점에 주목하자.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.