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;