概述
1.需求说明
查询特定表(含条件),并把其结果集(一千多万的数据)进行导出。
2.使用技术就是spool,代码如下:
spool /user/result.txt
select phone from t_mt where state_true='0';
spool off
其中/user/result.txt 为结果集的输出文件。
3.因为需求要循环查询,就创建.sh文件,以test.sh为例,执行:vi test.sh
复制下列代码到test.sh中。
#!/bin/sh
export ORACLE_BASE=/user/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=qxt
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
#oracle字符集
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#----脚本链接数据库----------------------
#数据库地址
db_ip=127.0.0.1
db_port=1521
db_sid=qxt
db_username=user01
db_password=121212
db_oracle_name="${db_username}/${db_password}@${db_ip}:${db_port}/${db_sid}"
# 日志输出路径
logOutPath=/user/mt_data/mt.log
# 开始时间
mydate="20200701"
echo 'mydate:'$mydate
for((j=0; j<31; j++))
do
# 日期加一天
DATE=$(date -d "$j days ${mydate}" +%Y%m%d)
echo $(date "+%Y-%m-%d %H:%M:%S")" start date:"$DATE >> ${logOutPath}
loc2=`sqlplus -s ${db_oracle_name} << !
set pages 0 feed off heading off feedback off verify off linesize 1000 trimspool on term off
spool /user/mt_data/t_mt_phone_${DATE}.txt
select phone from t_mt_${DATE} where state_true='0';
spool off
exit;
exit
!`
echo $(date "+%Y-%m-%d %H:%M:%S")" end date:"$DATE >> ${logOutPath}
done
echo $(date "+%Y-%m-%d %H:%M:%S")" 完成 "
说明:
db_ip:oracle数据库的ip
db_port:oracle数据库的端口号
db_sid:oracle数据库sid
db_username:oracle数据库的账号
db_password:oracle数据库的密码
spool常用的设置:
set head off:输出域标题,缺省为on
set linesize 20000:linesize可以设置的大点,防止一行长度不够
set echo off:显示sqlplus中的每个sql命令本身,缺省为on
set feedback off:回显本次sql命令处理的记录条数,缺省为on
set pagesize 0:输出每页行数,缺省为24,为了避免分页,可设定为0
set termout off:显示脚本中的命令的执行结果,缺省为on
set trimout on:去除标准输出每行的拖尾空格,缺省为off
set trimspool on:去除重定向(spool)输出每行的拖尾空格,缺省为off
4.授权执行:chmod +x test.sh
5.执行 : test.sh文件
最后
以上就是虚心太阳为你收集整理的oracle 查询数据的结果集导出的全部内容,希望文章能够帮你解决oracle 查询数据的结果集导出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复