Oracle
Oracle Data Record별 Text File 내보내는 방법
david2kim
2013. 1. 21. 17:47
Oracle DB에서 특정 Table의 Data를 Record별로 Text File을 생성하여 내보내고 싶을 때 어떻게 할까?
UTL_FILE 패키지를 이용하여 PL/SQL에서 파일의 입력 or 출력을 할 수 있다.
이는 PL/SQL에서 Log를 File별로 생성하고 싶을 때도 사용이 가능하다.
먼저, Oracle Directory를 생성해주어야 한다.
▣ Create Directory
DBA 계정으로 oracle에 로그인을 한 후, Directory를 생성하고, 이를 사용하고자 하는 계정에 부여하면 된다.
1. Create Directory exp_text as 'c:\temp'; --Temp Folder를 Directory로 설정하고, 이를 exp_text로 이름을 부여함
2. grant read, write on directory exp_text to scott; -- Scott 계정에 exp_text Directory에 대한 읽고, 쓰기 권한을 부여함.
|
위와 같이 Directory 생성 및 권한 부여가 되었다면, Scott 계정에서 아래와 같이 간단하게 PL/SQL을 이용하여 Text File로 Data를
추출할 수 있다.
▣ Export to Text File
create or replace procedure Export2Text IS vHandle UTL_FILE.FILE_TYPE; vDirectory varchar2(100); vFile varchar2(256); vOutput varchar2(32767); cursor c_cur is select empno, ename, hiredate, sal from emp;
begin vDirectory := 'exp_text'; for r_cur in c_cur loop if r_cur.empno > 0 then vFile := r_cur.empno || '.txt'; vHandle := UTL_FILE.FOPEN(vDirectory ,vFile,'W', 32767); vOutput := r_cur.ename || ', ' || r_cur.hiredate || ', ' || r_cur.sal; UTL_FILE.PUT_LINE(vHandle, vOutput); UTL_FILE.FCLOSE(vHandle); end if; end loop;
exception when others then UTL_FILE.FCLOSE_ALL; raise; end; / |
아래는 Directory내에 존재하는 file을 읽어오고자 할 때, 사용할 수 있는 PL/SQL이다.
▣ Import to Text File
create or replace procedure Import2Text is vHandle UTL_FILE.FILE_TYPE; vDirectory varchar2(100); vFile varchar2(256); vInput varchar2(32767); begin vDirectory := 'exp_text'; vFile := 'test.txt'; vHandle := UTL_FILE.FOPEN(vDirectory ,vFile,'R', 32767); begin loop UTL_FILE.GET_LINE(vHandle, vInput,32767); DBMS_OUTPUT.PUT_LINE(vInput); end loop; exception when NO_DATA_FOUND then dbms_output.put_line('last line of file'); end; UTL_FILE.FCLOSE(vHandle); exception when others then UTL_FILE.FCLOSE_ALL; raise; end; / |