获取ORACLE建表语句SHELL

  • 格式:docx
  • 大小:14.15 KB
  • 文档页数:3

#!/bin/sh
##############################################
# Author :Chengjl
# Function:Get DDL of objects;
# Declare :You need modify connecting oracle information
##############################################
if [ $# -ne 1 ];then
echo "Eg: sh Ora_Get_DDL.sh tablename"
exit 1
fi
ddl_file=/home/oracle/chengjl/DDL.txt
tmp_file=/home/oracle/chengjl/tmp_file.txt
tab_like=$1
echo ''>$ddl_file
#Source database connect information
sdb_user=aml
sdb_passwd=aml
sdb_tns=AML_30.3.3.30
table_list=$(sqlplus -s $sdb_user/$sdb_passwd@$sdb_tns <<eof
set echo off
set show off
set verify off
set feedback off
set heading off
select table_name from user_tables where table_name like '${tab_like}%'; eof
)
function Get_DDL()
{
table_name=$1
sqlplus -s $sdb_user/$sdb_passwd@$sdb_tns <<eof >/dev/null
SET feedback off
SET pagesize 0
SET long 90000
SET echo off
SET linesize 10000
spool ${tmp_file}
SELECT dbms_metadata.get_ddl('TABLE',table_name)
FROM user_tables
WHERE Table_Name = '${table_name}'
;
SELECT ';' FROM DUAL;
SELECT '--Add comments to the table' FROM DUAL
;
SELECT 'comment on table '||table_name||' is '||CHR(39)||replace(replace(comments,chr(10),''),chr(13),'')||CHR(39)||';'
FROM user_tab_comments
WHERE TABLE_NAME = '${table_name}'
;
SELECT '--Add comments to the colums' FROM DUAL
;
SELECT 'comment on column ' || A.TABLE_NAME || '.' || A.COLUMN_NAME ||
LPAD(' ', 3 + C.MAXLEN - LENGTH(A.TABLE_NAME || A.COLUMN_NAME), '') ||
' is ''' || replace(replace(MENTS,chr(10),''),chr(13),'') || ''';' AS comments
FROM USER_TAB_COLUMNS A
LEFT JOIN USER_COL_COMMENTS B
ON A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME
LEFT JOIN (SELECT TABLE_NAME,
MAX(LENGTH(TABLE_NAME || COLUMN_NAME)) AS MAXLEN,
MAX(LENGTH(COLUMN_ID)) AS MAXID
FROM USER_TAB_COLUMNS
GROUP BY TABLE_NAME) C
ON A.TABLE_NAME = C.TABLE_NAME
WHERE A.TABLE_NAME = '${table_name}'
ORDER BY A.table_name,A.COLUMN_ID
;
spool off
eof
}
for t in ${table_list}
do
Get_DDL ${t}
flag=0
while read line
do
tmp_line=$(echo $line|sed 's/\"//g'|sed 's/CREATE TABLE .*\./CREATE TABLE /g')
flag0=$(echo $tmp_line|grep 'TABLESPACE'|wc -l)
flag1=$(echo $tmp_line|grep 'STORAGE(.*)'|wc -l)
flag2=$(echo $tmp_line|grep 'STORAGE(.*'|wc -l)
flag3=$(echo $tmp_line|grep ') *$'|wc -l)
if [ "$flag0" == 1 ];then
continue
elif [ "$flag1" == 1 ];then
continue
elif [ "$flag2" == 1 ];then
flag=1
continue
elif [ "$flag" == 1 ] && [ "$flag3" == 0 ] ;then
continue
elif [ "$flag" == 1 ] && [ "$flag3" == 1 ];then
flag=0
continue
else
echo $tmp_line>>$ddl_file
fi
# |sed 's/PCTFREE [0-9]\{1\,\}//g'|sed 's/INITRANS [0-9]\{1\,\}//g'|sed 's/MAXTRANS [0-9]\{1\,\}//g'|sed 's/COMPUTE STATISTICS [0-9]\{1\,\}//g')
done<${tmp_file}
done
if [ -f "$tmp_file" ];then
rm ${tmp_file};
fi
echo "Result in DDL.txt"
exit 0。