
使用shell调用sqlplus来执行sql语句,导出到文件可以通过spool命令指定文件,我从自己曾经写的脚本截取一段给你示例吧,如果你熟悉shell编写的话,很容易改造成自己需要的
参数1-6分别是表名,oracle用户名,oracle密码,oracle服务器ip地址,oracle服务器端口,oracle服务器的服务名(如果不确定联系DB管理员)
T_NAME=$1
USERID=$2
PASSWD=$3
IP=$4
PORT=$5
SERVICENAME=$6
DB_LINK_STR=$USERID/$PASSWD@$IP:$PORT/$SERVICENAME
sqlplus -S $DB_LINK_STR<<EOF
set HEADING OFF
SET ECHO OFF
SET FEEDBACK OFF
SET TERMOUT OFF
SET LINESIZE 1000
SET TRIMSPOOL ON
spool tempout
select COLUMN_NAME||' '||DATA_TYPE||' '||DATA_LENGTH||' ',DATA_DEFAULT from user_tab_columns where table_name='$T_NAME' order by column_id;
spool off
exit
EOF
sed -i '/^$/d' tempout
执行完毕后,就会出现tempout文件,里面是指定表的一些信息:列名,数据类型,数据长度和默认值,且以空格分隔
应用spool命令,大量数据汇出很方便,脚本内容大致如下:
--============================================
#!/bin/sh
#第一步
sqlplus -s 用户名/密码@服务名<<EOF
spool customerssql --输出文件路径及名称
set trimspool on
set linesize 8000
set pagesize 50000
set newpage 1
set heading off
set term off
set feedback off
set sqlblankline off
SELECT A || '|+|' || --字段A
B || '|+|' || --字段B
C || '|+|' || --字段C
D || '|+|' || --字段D
E || '|+|' || --字段E
F || '|+|' || --字段F
G || '|+|' || --字段G
TO_CHAR(H,'YYYYMMDD HH:MM:SS') || '|+|' --字段H,可以使用函数
FROM CUSTOMERS;--表名
spool off
exit
EOF
--=======================
其中'|+|'为分隔符,也可以换成你说的逗号,即','。调用该脚本后,在根目录下生成customerssql文件。
兄弟,不是damp文件,是dmp文件吧
开始-运行-cmd
exp 数据库用户/密码@数据库连接串 tables=(table01) file=c:\xx\table01dmp
然后回车
如果是通过shell脚本运行Oracle的sql语句,可以这样写shell脚本:
echo “Oracle SQL Example"
sqlplus / as sysdba <<EOF
select from scottemp;
EOF
也就是把sql语句写到shell脚本的EOF之间。
1、用sqlplus执行
spool empxls
select from emp;
spool off即可
2、实例
#!/bin/sh
#!/bin/bash
today=`date +%Y%m%d`
file=emp_${today}xls
sqlplus 'scott/tigger' << EOF
set linesize 200
set head off
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
spool $file
select from emp;
spool off
quit;
EOF
#处理一下文件头
sed -i '/select/d' $file
sed -i '/spool/d' $file
1、简单的单列
#!/bin/sh
sqlplus 'user001/12345678'<< EOF
set define off
set hea off
spool vip1txt
select username from ACCOUNT where LEVEL=7;
spool off
quit;
EOF
sed -i 's/[ ]//g' ~/vip1txt
sed -i '/^$/d' ~/vip1txt
sed -i '1d' ~/vip1txt
sed -i '$d' ~/vip1txt
scp -P22 ~/vip1txt root@1721612:/root
2、复杂的多列
#!/bin/sh
cid=$1;
today=`date +%Y-%m-%d-%H%M`
ym=`date +%Y%m`
ymd=`date -d -1days +%Y%m%d`
last_ym=`date -d last-month +%Y%m`
next_ym=`date -d next-month +%Y%m`
file=chat_recorder_${cid}_20140707-11xls
if [[ $1 == '' ]];then
echo "Usage: $0 company_id "
exit 0;
fi
sqlplus 'user002/12345678' << EOF
set linesize 200
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
spool ${file}
select a,b from recorder_${ym} a,t_${ym} b where acompany_id='$cid' and acreate_time between TO_DATE('2014-07-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and TO_DATE('2014-07-12 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and achat_id=bchat_id order by bchat_id ;
spool off
quit;
EOF
sed -i '/select/d' $file
zip -r ${file}zip $file
scp -P22 ${file}zip root@1721615:/opt
以上就是关于你好,我想写个shell脚本连接oracle服务器查询某表数据并且导出到txt文本全部的内容,包括:你好,我想写个shell脚本连接oracle服务器查询某表数据并且导出到txt文本、求一份shell脚本,需求是:从Oracle数据库中提取一个表中的数据输出到文件,并且每条记录一行;、如何编写一个shell脚本,从oracle数据库一个表table01读取全部数据到指定xx目录下的table01.damp文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)