Oracle

게시글 보기
작성자 유건데이타 등록일 2015-07-15
제목 SPOOL을 이용하여 TABLE의 DATA를 SAM FILE로 만드는 예제
SPOOL을 이용하여 TABLE의 DATA를 SAM FILE로 만드는 예제
======================================================

Purpose
-------
Oracle 의 table data를 text file로 받는 방법에 대해 알아보자.


Explanation
-----------

Oracle에서 table의 data를 sam file형태로 만드는 방법에는 proc를
이용하는 등 여러 가지가 있지만 SPOOL Command를 이용하는 것이 가장
간편하다. 이 경우 sqlplus 자체적으로 지원하는 여러 가지 command를
사용하면 sam file을 더 깨끗한 데이터만 받도록 할 수 있다.

Spool 시에 이용할 수 있는 sqlplus option 은 다음과 같은 것이 있다.

. set pagesize nn - 한 page에 몇 line을 display할 것인지를 결정한다.
pagesize가 바뀔 때마다 한 line 씩 공백이 생기므로 spool 로 받을 때는
크게 정하는 것이 좋다.
. set heading on/off - data의 column name을 display 할 것인지를
결정한다. Spool 작업시에는 보통 column 이름이 나오지 않도록 한다.
. set linesize nn - line의 크기를 결정한다. select하는 한 row의
길이가 길면 다음 line으로 넘어가지 않고 계속 연결되도록 하기 위해
크게 설정할 때도 있다.
. set term on/off - script를 실행할 때 화면에 display 될 지를
결정한다. 보통 많은 데이터를 spool 로 받을 때는 화면에 display하면
시간이 오래 걸리므로 off로 하는 경우가 많다.
. set each on/off - off로 하면 script에서 실행하는 명령어가
화면에 display되지 않고 실행 결과만 나타나도록 한다.

이런 set 명령을 이용하여 sam file을 만들기 위해서는
다음과 같이 script를 이용하여 한 번에 실행하는 것이 좋다.


Example
-------

$ vi dept.sql -- script를 작성한다.
set heading off
/* header가 display되지 않는다 */
set pagesize 1000
/* pagesize의 default는 14이며 그대로 하면 14줄마다 1줄씩 공백이
생기므로 그런 현상을 방지하기 위해 크게 지정한다. */
set linesize 300
/* linesize도 record 길이만큼 지정하여 아래로 구분되지 않도록 한다. */
set echo off
/* 명령이 display되지 않도록 한다. */
set term off
/* 조회 결과가 화면에 나오지 않도록 한다. */
/* 이상은 sql에서 사용하는 set command */
spool dept.dat
/* data가 들어가는 화일 */
select deptno, dname, loc from dept
/
/* 위의 select문에서 컬럼 사이에 일정한 공백이나 ',' 로
구분하고 싶다면 컬럼들 사이에 원하는 문자를 지정하면 된다.
예) select deptno ||','||dname||','|| loc from dept */
spool off

$ sqlplus scott/tiger -- 해당 user로 접속한다.

SQL> @dept -- 해당 script를 실행한다.

실행된 후에 다음의 생성된 dept.dat file을 열어보면
원하는 형태의 data가 저장되어 있다.


Reference Documents
-------------------
SQL*PLUS User's Guide
Comment
등록된 코멘트가 없습니다.