Sqlplus

SQL*PlusでTSV出力

More than 1 year has passed since last update.


SQL

コツは、タブchr(9)区切りでSELECT句を書くところ。&from_dateは実行時の引数で条件加えたいときの例。


sample.sql

select col_a

||chr(9)||col_b
||chr(9)||col_c
from table_a
where col_a=1000
and col_date > TO_DATE('YYYYMMDDHH24MISS',&from_date)
/


シェルスクリプト


  • 第1引数:実行SQL

  • 第2引数:実行SQLに渡すパラメータ(実行SQLで&で定義)


output_tsv.sh


USER=${固定ならべた書き、可変ならパラメータ化}
PASSWORD=${バレないように環境変数か何かで定義しておく}
SID=${固定ならべた書き、可変ならパラメータ化}

outfile=`date +"%Y%m%d%H%M%S"`.tsv

sqlplus -L -S > /dev/null << EOF
${USER}/${PASSWORD}@${SID}
def from_date=
${2}
set verify off
SET LINE 10000
SET PAGES 0
SET ECHO OFF
SET TRIMS ON
SET FEEDBACK OFF
SET COLSEP '' -- これはいらなかも
WHENEVER SQLERROR EXIT FAILURE
ALTER SESSION SET NLS_DATE_FORMAT='YYYYMMDD HH24:MI:SS';
-- ALTER SESSION SET CURRENT_SCHEMA=xxxxx;
spool
${out_file}
@
${1}
spool off
quit;

EOF



実行

> ./output_tsv.sh sample.sql 20161201082710