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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-08  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 717
  • 日志数: 10
  • 图片数: 1
  • 建立时间: 2008-01-15
  • 更新时间: 2008-08-21

RSS订阅

Open Toolbar