oracle検索結果は複数なcsvファイル出力する

silkTestで移行試験をやるときに、お客様からの要望はDBから取得するレコードは複数なcsvファイルに格納する。
該ファイルの接続子は[.n]ここのnは整数である(0から加えて。)
とりあえずはshソースを共有します。何か問題が有りましたら、私に連絡してください。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#!/bin/sh
# 実行時に指定された引数の数、つまり変数 $# の値が1でなければエラー終了。
if [ $# -ne 1 ]; then
  echo "指定された引数は$#個です。" 1>&2
  echo "実行するには1個の引数が必要です。" 1>&2
  exit 1
fi
# ヒアドキュメントでメッセージを表示する。
cat <<__eot__>指定された引数は、
  $1
の$#個です。
__EOT__
#実行sqlのディレクトリ
SQLDIR="/home/igha9001/btchos/$1"
export SQLDIR
#幾つかレコードでファイルを分割する
BUNKATSU_LINE="300"
export BUNKATSU_LINE
#総計レコード数
RECORD_COUNT=0
#分割ファイル数
m=0
#csvデータは抽出sqlから実行して取得する
echo exit | $ORACLE_HOME/bin/sqlplus -s GA7_MAIN/'12qw#$ER'@GA7 @$SQLDIR/$1_ActiveData.sql
#該当パタンーに対する抽出sqlのレコード数を取得する
RECORD_COUNT=`tail -n 1 "$SQLDIR/$1_activedata.csv"`
#最終行からレコード総行数を削除する
sed -i -e '$d' $SQLDIR/$1_activedata.csv
#抽出sqlから取得総件数より、分割したファイル数を計算する
#総レコード数は分割定数より小さいの場合、分割ファイル数の設定
if [ `expr $RECORD_COUNT \/ $BUNKATSU_LINE` -eq 0 ]; then
  m=1
#余数が0以外の場合、分割ファイル数の設定
elif [ `expr $RECORD_COUNT \% $BUNKATSU_LINE` -ne  0 ]; then
  m=`expr \( $RECORD_COUNT \/ $BUNKATSU_LINE \) + 1`
else
  m=`expr \( $RECORD_COUNT \/ $BUNKATSU_LINE \)`
fi
#ファイル分割の具体方法
for i in `seq 1 $m`; do
  if [ $i -eq 1 ]; then
    head -n `expr \( $BUNKATSU_LINE \* $i \)` $SQLDIR/$1_activedata.csv >> $SQLDIR/$1_activedata.csv.$i
  else
    #ファイル毎にはヘッダを追加する
    head -n 1 $SQLDIR/$1_activedata.csv >> $SQLDIR/$1_activedata.csv.$i
    #指定行数のレコードを取得してファイルに追加する
    if [ `expr \( $BUNKATSU_LINE \* $i \)` -gt $RECORD_COUNT ]; then
      head -n `expr \( $BUNKATSU_LINE \* $i \)` $SQLDIR/$1_activedata.csv | tail -`expr \( $RECORD_COUNT - \( $BUNKATSU_LINE \* \( $i - 1 \) \) + 1 \)` >> $SQLDIR/$1_activedata.csv.$i
    else
      head -n `expr \( $BUNKATSU_LINE \* $i \)` $SQLDIR/$1_activedata.csv | tail -$BUNKATSU_LINE >> $SQLDIR/$1_activedata.csv.$i
    fi
  fi
done
exit 0
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 
上記のsh中身で、$1_ActiveData.sqlの内容は以下の通りです。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
SET ECHO OFF
SET PAGESIZE 0
SET HEADING ON
SET UNDERLINE OFF
SET TERMOUT OFF
SET PAUSE OFF
SET LINESIZE 500
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET COLSEP ','
 
SPOOL /home/igha9001/btchos/ZT-051/ZT-051_activedata.csv
@/home/igha9001/btchos/ZT-051/ZT-051_ActiveData_Header.sql
@/home/igha9001/btchos/ZT-051/ZT-051_ActiveData_Body.sql
@/home/igha9001/btchos/ZT-051/ZT-051_ActiveData_Count.sql
SPOOL OFF
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 
以上です、宜しくお願い致します。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24535596/viewspace-750068/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24535596/viewspace-750068/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值