你好,我想写个shell脚本连接oracle服务器查询某表数据并且导出到txt文本

你好,我想写个shell脚本连接oracle服务器查询某表数据并且导出到txt文本,第1张

使用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文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10084407.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存