ORACLE Tip2008. 12. 3. 00:56
파일이 저장될 디렉토리 설정하기.


1. sys 나 system user 로 접속한다.

$ sqlplus /nolog
SQL> conn sys/manager
Connected.

2. directory 를 생성한다.
SQL> create directory work_dir as '/work';
Directory created.

3. 생성된 directory 에 대한 read 권한을 준다.
SQL> grant read on directory work_dir to public;
Grant succeeded.

SQL> grant read on directory work_dir to public;
Grant succeeded.

4. 생성한 디렉토리 조회
SQL> select * from dba_directories;


소스보기 프로시져 생성하기


1. 프로시져 소스를 파일로 받는 함수 생성하기.


create or replace procedure cr_proc_script(p_pn varchar2)
is
file_id utl_file.file_type;
cursor c1(v_pn varchar2) is select name, text, line from user_source
where upper(name) like v_pn and type = 'PROCEDURE' order by name,line;
v_name varchar2(30) := ' ';
r_name varchar2(30);
r_text varchar2(4000);
r_line number;
v_line number := 0;

begin

open c1(p_pn);
loop
fetch c1 into r_name, r_text, r_line;
exit when c1%notfound;

if r_name != v_name then

    file_id :=
    utl_file.fopen('WORK_DIR','cr_'||r_name||'.sql', 'w');
    utl_file.put(file_id, 'create or replace ');

    select max(line) into v_line from user_source
    where name = r_name and type = 'PROCEDURE';

end if;

utl_file.put_line(file_id, r_text);
v_name := r_name;

if (r_name = v_name) and (r_line = v_line) then
    utl_file.put_line(file_id, '/');
    utl_file.fclose(file_id);
end if;

end loop;
close c1;

end;
/


2. 프로시져 소스 파일로 받기 사용 방법

- 특정 프로시져 파일로 받기.
SQL> exec cr_proc_script('프로시져명');

- user가 가지고 있는 모든 procedure의 source을 보고자 할때
SQL> exec cr_proc_script('%');


3. Trigger Source 파일로 받는 함수 생성하기.

create or replace procedure cr_trg_script(p_tn varchar2)
is
file_id utl_file.file_type;
cursor c1(v_tn varchar2) is select trigger_name, description, trigger_body
from user_triggers
where upper(trigger_name) like v_tn ;
r_trg_name varchar2(30);
r_description varchar2(2000);
r_trg_body varchar2(32000);

begin

open c1(p_tn);
loop
fetch c1 into r_trg_name, r_description, r_trg_body;
exit when c1%notfound;

file_id :=
utl_file.fopen('/mnt3/rctest80/tool', 'cr_'||r_trg_name||'.sql', 'w');
utl_file.put(file_id, 'create or replace trigger ');

utl_file.put_line(file_id, r_description);
utl_file.put_line(file_id, r_trg_body );

utl_file.put_line(file_id, '/');
utl_file.fclose(file_id);

end loop;
close c1;

end;
/


4. 트리거 소스 파일로 받기 사용 방법

- 특정 트리거 소스 파일로 받기.
SQL> exec cr_trg_script('트리거명');

- user가 가지고 있는 모든 trigger의 source을 보고자 할때
SQL> exec cr_trg_script('%');

Posted by 항아리고미