#! /bin/sh
############################ 这是注释 #######################################
#1.可以自定义建表张数
#2.可以指定表名前缀,表名实现自增长
#3.可以指定每张表最多含有的字段数(每张表的字段数可以随机生成)
#4.每张表的字段类型有程序随机指定
#5.应覆盖oracle所有的字段类型
#6.对于字段类型为字符型的,如varchar、char等,字段长度也应有系统随机生成
#7.字段名称应包含表标识,且字段名自增长
#8.用户可以指定表的存储路径及文件名
#9.部分表应包含非空约束、主键
#作者:zqs
#日期:2011-07-20
############################# 这是注释 #######################################
############################# 定义变量 #######################################
#定义数组用于存放oracle的数据类型
#用于存放无须指定字段长度的数据类型
declare -a array_col
#用于指定字段长度在1-2000字节之间的数据类型
#其中nchar、NATIONAL CHARACTER、NATIONAL CHAR最长支持1000字节
declare -a array_colu
#用于指定字段长度在1-4000字节之间的数据类型
declare -a array_colum
#表名前缀
table_prefix=""
#字段名包含项(中缀)
underlined="_column"
#定义表存储路径(默认),用户也可自定义
tab_sto_path="/var/zqs/oracle_table/ora_tab.sql"
#建表张数
tab_num=""
#每张表所能包含的最大个数
tab_col_num=""
#定义文本的字体颜色为蓝色
blue="\e[1;34m"
#定义文本的字体颜色为红色
ALARM="\e[1;31m"
#定义文本的字体颜色为绿色
GREEN="\e[1;32m"
#定义文本的背景色为红色
RED="\e[01;41;32m"
#重新设置屏幕到默认设置
PRE="\e[0m"
############################# 定义变量 #######################################
array_col=([0]=clob [1]=nclob [2]=number [3]=binary_float [4]=binary_double [5]=date [6]="interval day to second" [7]="interval year to month" [8]=timestamp [9]="timestamp with time zone" [10]="timestamp with local time zone" [11]=blob [12]=bfile [13]=rowid [14]=numeric [15]=integer [16]=int [17]=smallint [18]=float [19]="double precision" [20]=real [21]=urowid [22]=mlslabel [23]=decimal)
array_colu=([0]=char [1]=nchar [2]="NATIONAL CHARACTER" [3]="NATIONAL CHAR" [4]=raw [5]=nvarchar2 [6]="national character varying" [7]="national char varying" [8]="nchar varying")
array_colum=([0]=varchar2 [1]=VARCHAR [2]="character varying" [3]="char varying" )
#批量建表,并写入$tab_sto_path
function create_table()
(
############## 指定表的存储路径及文件名 ###################################
echo -e "$blue ================================================================================= $PRE"
echo -e "$ALARM ORACLE建表参数设置,请认真填写! $PRE"
echo -e "$blue ================================================================================= $PRE"
while true
do
echo -ne " $ALARM 是否指定oracle表存储路径及文件名?(y/n): $PRE"
read choose
if [ "$choose" = "y" ] || [ "$choose" = "Y" ];then
while true
do
echo -e "$blue ================================================================================= $PRE"
echo -ne " $blue 请输入oracle表存储路径: $PRE"
read sto_path
#表存储路径不能为空
if [ "zqs$sto_path" == "zqs" ];then
continue
else
break
fi
done
mkdir -p $sto_path
while true
do
echo -e "$blue ================================================================================= $PRE"
echo -ne " $blue 请输入储存oracle表的文件名: $PRE"
read file_name
#表文件名不能为空
if [ "zqs$file_name" == "zqs" ];then
continue
else
break
fi
done
touch $sto_path/$file_name
tab_sto_path="$sto_path/$file_name"
break
elif [ "$choose" = "n" ] || [ "$choose" = "N" ];then
mkdir -p /var/zqs/oracle_table
touch /var/zqs/oracle_table/ora_tab.sql
echo -e "$blue ================================================================================= $PRE"
echo -e " $blue oracle表默认存储路径为: $PRE $ALARM /var/zqs/oracle_table $PRE"
echo -e "$blue ================================================================================= $PRE"
echo -e " $blue 文件名为:$PRE $ALARM ora_tab.sql $PRE"
break
else
echo -e "$blue ================================================================================= $PRE"
echo -e "$blue 选项错误,请核实后再输入! $PRE"
echo -e "$blue ================================================================================= $PRE"
fi
done
############## 指定表的存储路径及文件名 ###################################
echo -e "$blue ================================================================================= $PRE"
############## 指定表名前缀 ###############################################
while true
do
echo -ne " $ALARM 是否指定oracle表的表名前缀?(y/n): $PRE"
read choose
if [ "$choose" = "y" ] || [ "$choose" = "Y" ];then
while true
do
echo -e "$blue ================================================================================= $PRE"
echo -ne " $blue 请输入oracle表的表名前缀(最长10个字节): $PRE"
read table_prefix
len=`echo ${#table_prefix}`
#表前缀不能为空,且最长10个字节
if [ "zqs$table_prefix" != "zqs" ] && [ $len -lt 11 ];then
break
else
continue
fi
done
elif [ "$choose" = "n" ] || [ "$choose" = "N" ];then
echo -e "$blue ================================================================================= $PRE"
echo -e " $blue 系统采用oracle表的默认表名前缀为: $ALARM test_tab $PRE"
table_prefix="test_tab"
break
else
echo -e "$blue ================================================================================= $PRE"
echo -e "$blue 选项错误,请核实后再输入! $PRE"
echo -e "$blue ================================================================================= $PRE"
fi
done
############## 指定表名前缀 ###############################################
echo -e "$blue ================================================================================= $PRE"
############## 指定建表个数 ###############################################
while true
do
echo -ne " $blue 请输入所要创建表的个数(必须为数字): $PRE"
read tab_num
#表数不能为空,且只能为数字
if [ -z $(echo $tab_num | sed -e 's/[0-9]//g') ] && [ "zqs$tab_num" != "zqs" ];then
break
else
echo -e "$blue ================================================================================= $PRE"
continue
fi
done
############## 指定建表个数 ###############################################
echo -e "$blue ================================================================================= $PRE"
############## 指定每张表所能包含字段的最大个数 ###########################
while true
do
echo -ne " $blue 请输入每张表所能含有字段的最大个数(必须为数字): $PRE"
read tab_col_num
#字段数不能为空,且只能为数字
if [ -z $(echo $tab_col_num | sed -e 's/[0-9]//g') ] && [ "zqs$tab_col_num" != "zqs" ];then
break
else
echo -e "$blue ================================================================================= $PRE"
continue
fi
done
############## 指定每张表所能包含字段的最大个数 ############################
echo -e "$blue ================================================================================= $PRE"
############## 以下是建表逻辑 ##############################################
clock --hctosys
echo -e "$blue 建表开始时间 $PRE:$ALARM`clock` $PRE"
starttime=`date -d "now" +%s`
echo -e "$blue ================================================================================= $PRE"
echo -e "$ALARM 正在批量建表,请稍后…… $PRE"
echo -e "$blue ================================================================================= $PRE"
while true
do