#!/bin/ksh
#############################################
#
# 模塊: putoutdata.sh
# 做者: XXXXXX
# 描述: 根據一個數據庫或表名來卸載數據並生成對應的數據文件
# 文件名爲 表名.unl
# 參數 1 = 用戶名/密碼[@實例名]
# 參數 2 = 表名
# 參數 3 = 查詢條件 "省略where"[可選]
# 參數 4 = 文件名前綴且 輸出文件名爲 前綴_表名.unl[可選]
# 參數 5 = 文件中須要替換的內容
# 有參數5時,必須配合參數4一塊兒使用 參數4 爲被替換的內容 參數5 爲替換的內容
# 例2.unload user/password rate
# 將 rate 中的所有數據導入文件中,
# 輸出文件爲 rate .unl
# 例3.unload user/password rate " code='6'"
# 將 rate 中 code= 679的數據導入文件中,
# 輸出文件爲 rate.unl
# 例4.unload user/password rate " code='6'" 9
# 將 prem_rate 中 code= 6的數據導入文件中,
# 輸出文件爲 9_rate.unl
# 例5.:unload user/password rate " pol_code='6'" 7 1
# 將 rate 中 code= 6的數據導入文件中,且將 全部6替換爲 7
# 輸出文件爲 1_rate.unlsql
##########################################數據庫
lv_sep="|" # --分隔符,能夠修改爲本身想要的分隔符,如"|"code
##獲取記錄,拼入unl文件中
f_get_records()
{
rm -f lv_$table.txt
SQLS2="select * from $table where 1=1 ${sqlwhere};"
sqlplus -s ${userid} <<-!!! >/dev/null
set colsep ${lv_sep};
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set linesize 32767;
set termout off;
set trimout on;
set trimspool on;
spool lv_$table.txt;
${SQLS2}
spool off;
!!!
if [ -f lv_$table.txt ]
then
cat lv_$table.txt | grep -v "^SQL>"|sed -e "s/ *$//g"|sed "s/$/|/g"|sed -e "s/ *|/|/g"|sed -e "s/| */|/g" >${newname}${table}.unl
if [[ `grep "ORA-" ${newname}$table.unl` = "" ]]; then
echo "unload table ${newname}${table}....\t\t\t\t\t ok"
else
cat ${newname}${table}.unl
err="$err ${newname}${table}"
fi
else
echo $0 error
fi
rm -f lv_$table.txt
}rem
##將拼入unl文件中的特定內容替換爲指定的數據
f_fix_records()
{
if [ -f $table.unl ]
then
cat $table.unl | grep ${des} |sed "s/${des}|/${newtext}|/g" >${newtext}_${table}.unl
if [[ `grep "ORA-" $table.unl` = "" ]]; then
echo "unload table ${table}....\t\t\t\t\t ok"
else
cat ${table}.unl
err="$err ${table}"
fi
else
echo $0 error
fi
rm -f $table.unl
}get
## 主程序入口
lv_no=$#it
case ${lv_no} in
2)##導出整張表的數據
userid=$1
table=$2
f_get_records;
;;
3)##導出條件中的數據
userid=$1
table=$2
sqlwhere=" and $3"
newname=""
f_get_records;
;;
4)##導出條件中的數據,並在文件前加前綴
userid=$1
table=$2
sqlwhere=" and $3"
newname="$4_"
f_get_records;
##將空文件放入一個單獨文件夾
curdir=$pwd
if [ ! -d "$4" ];
then
mkdir $4;
fi
for file in `ls $curdir`
do
if [ ! -s $file ]
then
mv ./$file ./$4;
fi
done
;;
5)##導出條件中的數據,將文件中的特定數據替換爲指定數據
userid=$1
table=$2
sqlwhere=" and $3"
des=$4
newtext=$5
f_get_records;
f_fix_records;
##將空文件放入一個單獨文件夾
curdir=$pwd
if [ ! -d "$newtext" ];
then
mkdir ${newtext}
fi
for file in `ls $curdir`
do
if [ ! -s $file ]
then
mv ./$file ./$newtext;
fi
done
;;
*)
echo "Usage: $0 "
exit
;;
esactable
#########################################結束操做sed
if [[ "X$err" = "X" ]];then
echo "Unload Complete!,Thank you!"
else
echo "Unload Table $err error, please check it!"
fifile