您的位置:首页 > 其它

spool使用脚本封装

2008-04-01 16:28 162 查看
oracle的spool工具可以将数据导出为文本格式,有很强的功能和实用性,如果能灵活应用,能带来很多好处和便捷。

下面是我写的两个示例脚本,使用着可以直接拷贝使用,如有更好的改进,请补充。
在unix/linux下,vi sqlexport.sh,下面是 sqlexport.sh的文件内容:
#!/bin/sh
if [ $# -ne 3 ]; then
echo "usage:$0 user/passwd@dbstr sqlfile exportfile";
exit 1;
fi
dbstr=$1;
sqlfile=$2;
outfile=$3;
echo $dbstr;
sqlplus $dbstr<<EOF
set pages 9999
set heading off
set echo off
set feedback off

@$sqlfile

exit;
EOF
mv out.txt $outfile
编写sql模版
template.sql
下面是文件内容:
set termout off
set echo off
set feedback off
set heading off
set verify off
--pagesize 0用来去除空行
set pagesize 0
set trimspool on
spool out.txt
select 'analyze table ' || owner || '.' || table_name ||
' estimate statistics sample 5000 rows;'
from dba_tables
where owner in ('DEV');
select
'analyze index '||owner||'.'||index_name||' compute statistics;'
from dba_indexes
where owner in ('DEV');
spool off
使用者可以替换template.sql里面的sql语句,就可以导出自己想要的数据了。
然后执行命令./sqlexport.sh dev/chenli@testdb tables.sql 2.txt
打开2.txt就是自己想要的参数导出数据了
脚本sqlexport.sh有三个参数,第一个参数是sqlplus登录数据库的命令串,如user/passwd@dbstr格式,第二个参数就是sql文件名,第三个参数是导出文件名,使用的时候只要按照template的样式,修改其中的查询sql语句就可以了。

提供另外一个例子,内容如下:

#! /usr/bin/sh

DAY=`date "+%Y%m%d"`
BILLING_CYCLE=`date "+%Y%m"`
out_file=''
dest_file=''

#第一个参数是帐期yyyymm
if [ $# -eq 1 ]
then
BILLING_CYCLE=$1
fi

out_file="Bill_NUMBER_TO_ACCESS_NUMBER_"$BILLING_CYCLE.txt
dest_file="Bill_NUMBER_TO_ACCESS_NUMBER_"$BILLING_CYCLE

sqlplus [url=mailto:bboss/bboss@cfcs1a<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: