#!/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