본문 바로가기

Database/ORACLE

[oracle] sqlplus로 select 한 결과 csv로 내려받는 방법 spool 사용법

[oracle] sqlplus로 select 한 결과 csv로 내려받는 방법 spool 사용법

 sqlplus로 select 한 결과 csv로 내려받는 방법 spool 사용법

안녕하세요.
오늘은 sqlplus로 oracle에서 select 한 결과를 csv로 저장하는 방법에 대해서 간단하게 설명을 드리고자 합니다. 물론 datagrip이나 다른 sql 툴이 있다면 쉽게 하실 수 있겠죠.

하지만, crontab으로 등록을 해야 한다던지 하면 cmd에서 해결이 되어야 합니다.
우선, cmd에서 sql 스크립트를 생성 하셔야 합니다. 그리고 나서 해당 스크립트를 실행하여 csv로 내려보도록 할께요.

자, 아래와 같이 cmd에서 sql 파일을 하나 만듭니다.

vi csv_export.sql

csv_export 라는 sql 파일을 하나 생성하는거죠. 그럼 다음 화면과 같이 화면이 열리게 됩니다.

빈 sql 파일 화명

 

 

 

여기다가 다음과 같이 써줍니다.

sql 스크립트

하나씩 한번 살펴볼께요.

set colsep !^@%#$
컬럼간에 <!^@%#$> 이라고 기호를 넣겠다는 의미 입니다. 내부 데이터에 특별한 문자가 없다면 <,> 으로 하시는게 일반적입니다.

set headsep off
헤터가 표시되지 않게 하는 옵션 입니다. on으로 하면 표시가 됩니다.

set pagesize 0
공백을 없게 하기위해 0으로 셋팅 합니다. 기본값은 14 입니다.

set trimspool on
아래에 나오는 linesize 옵션보다 내용이 짧으면 길이를 잘라주는 옵션 입니다.

set linesize 30000
한 라인의 길이를 의미 합니다.

set numwidth 5
숫자형 데이터의 기본출력 길이

set echo off
명령어가 표시 되지 않도록 하는 옵션

set feedback off
결과로 나온 행의 수 출력 여부 옵션

set termout off
파일 내부에 있는 SQL문장을 실행할때, 실행 결과를 화면에 출력 여부 옵션

이렇게 옵션을 지정 하고 다음과 같이 작성을 합니다.

spool dba_index.csv

select TABLE_OWNER
     , TABLE_NAME
     , INDEX_NAME
     , TEMPORARY
     , to_char(LAST_ANALYZED, 'YYYY-MM-DD HH24:MI:SS')
from sys.DBA_INDEXES
where ROWNUM < 11;

spool off

 

 

 

spool 예문

spool 이라고 쓰시고 뒤에 export 받을 csv 파일명을 적어주세요.
그리고 SQL문을 작성하고 마지막으로 spool off 해주시면 됩니다.

이때, 일시가 들어가는 컬럼의 경우, 위 쿼리에서 처럼 정확하게 명시를 해줘야 제대로 나옵니다.
DB상 옵션에 따라 다르게 나오거든요.
자, 이상태로 저장하고 빠져나옵니다.

그런다음 cms에서 sqlplus를 이용하여 다음과 같이 저장한 스크립트를 실행 하시면 됩니다.

sqlplus 오라클계정/비밀번호@tns명(원격지일경우) @csv_export.sql

위와 같이 커맨드 하시고, 실행하시면 짜잔!
csv 파일로 잘 떨어진것을 확인 할 수 있습니다.

간단하게 해결이 되셨을겁니다.
감사합니다.

by.sTricky