# cat chg_partition.sh
sqlplus -s system/oracle@orcl <<EOF select * from dual; set linesize 300 set page 0 col sql_text fro a300 set feedback off set long 99999 EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE','PRETTY',true); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE','SQLTERMINA',true); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE','TABLESPACE',true); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE','SEGMENT_ATTRIBUTES',false); EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE','REF_CONSTRAINTS',false); spool tmp_$1.sql select 'select DBMS_METADATA.GET_DDL('||chr(39)||'TABLE'||chr(39)||','||''''||table_name||chr(39)||','||''''||owner||chr(39)||') sql_text from dual;' FROM all_tables where owner='SCOTT' and table_name in(UPPER('$1')); spool off; spool $1_ddl.tmp @tmp_$1.sql spool off EOF last_line=`grep -n "PARTITION BY" $1_ddl.tmp|awk -F: '{print $1}'` last_line=`expr $last_line - 1` sed -nn '1,'$last_line'p' $1_ddl.tmp > tmp_$1_ddl.sql1 sed 's/PRADAPPO/'$2'/' tmp_$1_ddl.sql1 > tmp_$1_ddl.sql echo ";" >> tmp_$1_ddl.sql rm $1_ddl.tmp rm tmp_$1_ddl.sql1
使用:
# ksh chg_partition.sh EMP
生成的文件如下
tmp_EMP_ddl.sql
分区表,普通表