본문 바로가기

RDBMS/Oracle

oracle 패키지 소스를 파일로 저장하는 스크립트

declare
    c_owner_name varchar2(255) := 'scott';
    cursor pkg_cur is
        select * from all_source
        where owner = c_owner_name
--        and name = '패키지이름 특정할 경우'
        and (type = 'PACKAGE' or type = 'PACKAGE BODY')
        ;
    x_filename_output varchar2(255);
    OutFile  utl_file.file_type;
   
    -- 폴더 이름 : 
    DIR_NAME varchar2(255) := 'EXP_DIR';
begin
    OutFile := utl_file.fopen(DIR_NAME, 'whole.sql', 'w');
    for pkg_rec in pkg_cur loop
          -- file open succeed...
          IF utl_file.is_open(OutFile) THEN
            utl_file.put(OutFile, pkg_rec.text);
            utl_file.fflush(OutFile);
          end if;
    end loop;
    dbms_output.put_line(
        case when utl_file.is_open(OutFile)
        then 'opened' else 'not opened'
        end);
    IF utl_file.is_open(OutFile) THEN
        utl_file.fclose(OutFile);
    end if;
end;

헌데 utl_file.fopen() 내부 함수를 이용하려면 DIRECTORY를 미리 구성해야 한다.
(일종의 alias 개념으로 보면 될 듯. 시스템의 특정 경로에 대한 이름을 생성해서 사용한다)
다음 쿼리를 사용해서 생성되어 있는 DIRECTORY 항목을 확인할 수 있고,
혹은 DIRECTORY 항목을 생성할 수 있다.

select * from all_directories;
create or replace directory dir_temp as 'c:\temp';
grant read, write on directory tempdir to scott;