aix系统下用于导出oracle全表数据的shell
上一篇 /
下一篇 2008-02-19 10:37:22
oracle的spool方式导出数据要设置的参数较多,平常用起来很麻烦,而且各字段的输出都是定长的,为了不定长就必须自己为各字段加上连接符,很麻烦,为了自己用着方便,就花了点时间写了个shell,发出来,为经常导数据的兄弟提供点方便,刚搞unix的shell,水平低,别见笑。
用法:
alltable.sh 表名 [文件名]
文件名参数可选,如果不输则以表名+.txt为文件名。
在aix系统下测试通过
shell脚本如下:
param_no=$#
case ${param_no} in
1 )
tablename=$1
fileext=".txt"
filename=$tablename$fileext;;
2 )
tablename=$1
filename=$2;;
* )
echo "please input param"
exit;;
esac
rm -f /data/script.sql
vi /data/script.sql <<!
i
set echo off;
set colsep '|';
set verify off;
set heading off;
set feedback off;
set pagesize 0;
set linesize 1000;
set trimout on;
set termout off;
set trimspool on;
spool /data/tmp.txt;
select column_name from dba_tab_cols where table_name=upper('$tablename') order by column_id;
spool off;
#这个符号代表esc,输入方法是先ctrl+v,然后再按esc键,下同
:wq
!
sqlplus user/pass @script.sql <<!
exit;
!
lv_tables=`cat /data/tmp.txt |grep -v "^SQL>" | tr -d ' '`
echo $lv_tables
allsql="select"
del="||'|'||"
space=" "
endsql="''"
for lv_table in $lv_tables
do
allsql=$allsql$space$lv_table$del
done
from=" from "
ftablename=$from$tablename
allsql=$allsql$endsql$ftablename
echo $allsql
rm -f /data/script.sql
vi /data/script.sql <<!
i
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set echo off;
set colsep '|';
set verify off;
set heading off;
set feedback off;
set pagesize 0;
set linesize 1000;
set trimout on;
set termout off;
set trimspool on;
spool $filename;
$allsql
;
spool off;
:wq
!
#user/pass请自己根据具体的数据库登录方式更改
sqlplus user/pass @script.sql <<!
exit;
!
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: