ORACLE数据导出工具

最近应公司要求导出数据为csv格式文件供业务人员存档查看,同时还需要按照指定分隔符导出其他文本格式,待数据迁移使用,就是根据指定的sql,按照指定的分隔符和文本格式导出数据。所使用的数据是oralce,由于生产环境又没有下载安装像sqluldr2之类的数据库导出工具。想着自己利用自带的sqlplus客户端写个通用的oracle导数脚本,查询资料,发现网上各种博客里描写的spool一键导出,都是花拳绣腿,用起来是真不好使,数据错位,分隔符混乱,断行显示各种问题都有,特此记录下自己的这个导出工具。

shell脚本

--help查看使用说明

#!/bin/bash
#################################################################################################################################
#   name: sql export tool for oracle   
#   desc: export use MACKUP/SPOOL with sqlplus client
#   Author          Date            version
#   Epoch-Elysian   20231129        1.0
#
#################################################################################################################################
TYPE="csv" SEPERATOR="" FILE_PATH="" SPOOL_CONF="" EXPORT_SQL="" CLIENT_LANG="AMERICAN_AMERICA.AL32UTF8" HEADER="" USE_MACKUP="Y"
function usage {
cat <<EOF

Usage : sh $0 [options] -f <filepath> <sqltext>

examples : sh $0 -f /home/test.csv "select * from table;"
           sh $0 -f /home/test.data -t text -s "|" --head="id;name;age" "select * from table;"

Options 
-t, --type [ csv , text ]          导出文本类型: csv 和普通文本类型,不指定默认为[ csv ]
-f, --file                         导出文件路径
-s, --seperator                    设置字段分隔符,不指定默认情况下: csv [,] text [ TAB ]

--head                             添加头部,使用[;]分割,例如:--head="id;name;age"
--lang                             设置 sqlplus 客户端会话编码,默认值:[ AMERICAN_AMERICA .AL32UTF8]
--disable-mackup                   默认使用 MACKUP 生成文本格式,导出时,特殊情况下可能会出现异常,可添加此参数禁用 MACKUP 
                                   此时程序会自动解析sql,为sql字段拼接分隔符后导出,禁用后具有局限性,对执行的sql要求如下:
                                   1)不支持 select *,必须明确指定字段名
                                   2)不支持字段别名,拼接分隔符时会导致 sql 语法错误 

-- help 
EOF
}

function init_options {
    #指定 options 操作符
    ARGS=$(getopt -o t:s:f: -l type:,seperator:,file:,head:,lang:,disable-mackup,help -n "$0" -- "$@")
    # shellcheck disable=SC2181
    if [ $? -ne 0 ]; then
        usage
       
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值