#!/bin/sh
BASE_PATH=`dirname $0`
. ${BASE_PATH}/batchenv.sh
######################################<+>#######################################
#  File:
#  Project:
#  Description:
#  Language:
#  Date:
#  Author:
#  Update:
######################################<+>#######################################

error_message() {
    echo ${LOG_STR}

    LOG_STR=`log_output C "" `
    echo ${LOG_STR}

    USAGE="USAGE: ./${SHELL_BASENAME} -s[SCHEMA] -p[PASSWORD] -l[LOG_DIR] -d[FILE_DIR] -f[FILE_NAME]"
    USAGE_EXP="\\t-s[SCHEMA]・・・・・・スキーマ名\\n\
               \\t-p[PASSWORD]・・・・・パスワード\\n\
               \\t-l[LOG_DIR] ・・・・・ログディレクトリ名(省略可)\\n\
               \\t-d[FILE_DIR] ・・・・ 抽出用ファイル出力ディレクトリ名(省略可)\\n\
               \\t-f[FILE_NAME] ・・・・抽出用ファイル名(省略可)"
    LOG_STR=`log_output C "${USAGE}"`
    echo -e ${LOG_STR}
    echo -e ${USAGE_EXP}
}

# メイン関数
main() {
    LOG_STR=`log_output I "開始 : DB抽出(${SHELL_BASENAME})" `
    echo ${LOG_STR}

    # 引数設定内容
    LOG_STR=`log_output I "SCHEMA:${SCHEMA}"`
    echo ${LOG_STR}
    LOG_STR=`log_output I "PASSWORD:${PASSWORD_MASKING}"`
    echo ${LOG_STR}
    LOG_STR=`log_output I "LOG_DIR:${LOG_DIR}"`
    echo ${LOG_STR}
    LOG_STR=`log_output I "FILE_DIR:${FILE_DIR}"`
    echo ${LOG_STR}
    LOG_STR=`log_output I "FILE_NAME:${FILE_NAME}"`
    echo ${LOG_STR}

    # パラメータの生成
TMP_SQL=${LOG_DIR}/${SHELL_BASENAME}.$$
/bin/cat << EOF > ${TMP_SQL}
WHENEVER SQLERROR EXIT SQL.SQLCODE
set echo           off
set feedback       off
set heading        off
set linesize       32767
set pagesize       0
set pause          off
set termout        on
set verify         off
select
ASSET_ID         || ',' ||
ASSET_NAME       || ',' ||
UPDATE_USER      || ',' ||
REGIST_DATE_TIME || ',' ||
UPDATE_DATE_TIME || ',' ||
DELETE_FLAG
from ASSET
;
exit;
EOF

    # ステータス初期値設定
    RTN_STATUS=${RTN_NORMAL}

    # sqlplus -l:ログイン試行回数を1回に制限する -s:サイレントモードで起動する
    LOG_STR=`log_output I "sqlplus -s -l ${SCHEMA}/${PASSWORD_MASKING} @${TMP_SQL} > ${FILE_DIR}/${FILE_NAME}" `
    echo ${LOG_STR}
                           sqlplus -s -l ${SCHEMA}/${PASSWORD}         @${TMP_SQL} > ${FILE_DIR}/${FILE_NAME}
                           Rtn=$?

    if [ ${Rtn} -ne 0 ]; then
        cat ${FILE_DIR}/${FILE_NAME}
        LOG_STR=`log_output C "SQLCODE=${Rtn} 異常終了 : DB抽出(${SHELL_BASENAME})" `
        echo ${LOG_STR}
        RTN_STATUS=${RTN_ERROR}
    else
        LOG_STR=`log_output I "DB抽出ファイル情報" `
        echo ${LOG_STR}
        LOG_STR=`log_output I "ls -l ${FILE_DIR}/${FILE_NAME}" `
        echo ${LOG_STR}
        ls -l ${FILE_DIR}/${FILE_NAME}
        LOG_STR=`log_output I "正常終了 : DB抽出(${SHELL_BASENAME})" `
        echo ${LOG_STR}
        rm -f ${TMP_SQL}
    fi
    exit ${RTN_STATUS}
}

# =============================================================================#
# 変数初期化
# =============================================================================#
SCHEMA=""
PASSWORD=""
LOG_DIR=""
FILE_DIR=""
FILE_NAME=""

# 引数取得
TOOL_ARG=$*

# 引数チェック
for ARG in ${TOOL_ARG}; do
    # 引数の最初の2文字
    val1=`echo $ARG | awk '{val1=substr($1,1,2); print(val1);}'`
    # 引数の3文字目以降
    val2=`echo $ARG | awk '{val2=substr($1,3); print(val2);}'`

    # スキーマ名
    if [ "${val1}" = "-s" ];then
        # 重複チェック
        if [ "${SCHEMA}" != "" ];then
            LOG_STR=`log_output C "[${val1}]スキーマ名重複指定"`
            error_message
            exit ${RTN_ERROR}
        elif [ "${val2}" = "" ];then
            LOG_STR=`log_output C "[${val1}]スキーマ名不正"`
            error_message
            exit ${RTN_ERROR}
        fi
        SCHEMA=${val2}

    # パスワード
    elif [ "${val1}" = "-p" ];then
        # 重複チェック
        if [ "${PASSWORD}" != "" ];then
            LOG_STR=`log_output C "[${val1}]パスワード重複指定"`
            error_message
            exit ${RTN_ERROR}
        elif [ "${val2}" = "" ];then
            LOG_STR=`log_output C "[${val1}]パスワード不正"`
            error_message
            exit ${RTN_ERROR}
        fi
        PASSWORD=${val2}

    # ログディレクトリ名
    elif [ "${val1}" = "-l" ];then
        # 重複チェック
        if [ "${LOG_DIR}" != "" ];then
            LOG_STR=`log_output C "[${val1}]ログディレクトリ名重複指定"`
            error_message
            exit ${RTN_ERROR}
        elif [ "${val2}" = "" ] || [ ! -d "${val2}" ];then
            LOG_STR=`log_output C "[${val1}]ログディレクトリ名不正"`
            error_message
            exit ${RTN_ERROR}
        fi
        LOG_DIR=${val2}

    # 抽出用ファイル出力ディレクトリ名
    elif [ "${val1}" = "-l" ];then
        # 重複チェック
        if [ "${FILE_DIR}" != "" ];then
            LOG_STR=`log_output C "[${val1}]抽出用ファイル出力ディレクトリ名重複指定"`
            error_message
            exit ${RTN_ERROR}
        elif [ "${val2}" = "" ] || [ ! -d "${val2}" ];then
            LOG_STR=`log_output C "[${val1}]抽出用ファイル出力ディレクトリ名不正"`
            error_message
            exit ${RTN_ERROR}
        fi
        FILE_DIR=${val2}

    # 抽出ファイル名
    elif [ "${val1}" = "-f" ];then
        # 重複チェック
        if [ "${FILE_NAME}" != "" ];then
            LOG_STR=`log_output C "[${val1}]抽出ファイル名重複指定"`
            error_message
            exit ${RTN_ERROR}
        elif [ "${val2}" = "" ];then
            LOG_STR=`log_output C "[${val1}]抽出ファイル名不正"`
            error_message
            exit ${RTN_ERROR}
        fi
        FILE_NAME=`basename ${val2}`

    fi
done

# 必須引数指定確認チェック
if [ "${SCHEMA}" = "" ];then
    LOG_STR=`log_output C "スキーマ名未指定"`
    error_message
    exit ${RTN_ERROR}
elif [ "${PASSWORD}" = "" ];then
    LOG_STR=`log_output C "パスワード未指定"`
    error_message
    exit ${RTN_ERROR}
fi

# 省略可引数指定確認、デフォルト設定
if [ "${LOG_DIR}" = "" ];then
    LOG_DIR="."
fi
if [ "${FILE_DIR}" = "" ];then
    FILE_DIR="."
fi
if [ "${FILE_NAME}" = "" ];then
    FILE_NAME=${SHELL_BASENAME}.csv
fi

# 日付
DATE=`date +%Y%m%d`
DATE_ALL=`date +%Y%m%d%H%M%S`

# ログファイル
LOGFILE=${LOG_DIR}/${SHELL_BASENAME}_${DATE_ALL}.log

# =============================================================================#
# 主処理実行
# =============================================================================#
main $* 1>>${LOGFILE} 2>&1

管理人/副管理人のみ編集できます