今天打算写个bat自动提取数据到excel的小程序,oracle数据库,在网上找到了sqlplus工具,但是我的电脑上并没有这个命令,发现需要安装了oracle才能使用,在网上找到一篇不安装oracle使用sqlplus的方法,转载过来,试一试。
首先需要下载3个东西:
instantclient-basic-win32-10.2.0.4.zip
instantclient-jdbc-win32-10.2.0.4.zip
instantclient-sqlplus-win32-10.2.0.4.zip(上一个地址)
三个包分别解压,然后内容放到D:\instantclient_10_2下
需要一个tnsnames.ora文件,但是网上没有找到,也没有一台安装了oem的机器,于是在网上找了一个相关的配置自己创建了一个tnsnames.ora,放在D:\instantclient_10_2下(需要设置成需要访问的服务器的地址和端口号)
下载oiuldr.zip,解压,将sqluldr2.exe复制到D:\instantclient_10_2(如今ociuldr由于版本升级,现已经改名为SQLULDR2)
设置环境变量:
在PATH中增加;D:\instantclient_10_2;
新建SQLPATH,LOCAL,TNS_ADMIN,LD_LIBRARY_PATH四个环境变量名,变量值均为D:\instantclient_10_2;
如果查询结果为乱码,设置set NLS_LANG=XXXX(例如SIMPLIFIED CHINESE_CHINA.ZHS16GBK)
完成上述工作之后,在cmd中将路径切换到D:\instantclient_10_2下
执行sqluldr2 user=username/password@tnsname query="select **** from *****" file=output.txt
这样就将数据导入到txt文档中
需要将数据导入到excel文档中
mail.sql
set linesize 200
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
spool D:/instantclient_10_2/tables.xls
@D:/instantclient_10_2/get_tables.sql
spool off
exit
tables.xls是需要导出的xls文件
然后在cmd中执行
sqlplus "username/password@tnsname" @main.sql的路径
得到导出的文件
但是上述语句操作存在两个问题
1. 中文问题
2. excel中文本显示问题
研究一下mail.sql,其中有一个sqlplus的spool命令
spool是sqlplus的命令,主要完成以标准输出方式输出SQLPLUS的命令及执行结果,用于格式化导出ORACLE表数据
set colsep'' 域输出分隔符
set echo off 显示start启动的脚本中的每个sql命令(缺省为on)
set feedback off 回显本次sql命令处理的记录条数(缺省为on)
set heading off 输出域标题,缺省为on
set linesize 80 输出一行字符个数,缺省为80
set pagesize 0 输出每页的行数,缺省为24,为了避免分页,可以设定为0(不设置分页的话域标题会消失,可以将分页设置为一个比较大的值,但是分页大小会有最大值,超过最大值将不可用,但是我没有找到那个最大值,只好设置分页大小为50000)
set termout off 显示脚本中命令的执行结果,缺省为on
set trimout on 去除标准输出每行的拖尾空格,缺省为off
set trimspool on 去除重定向输出每行的拖尾空格,缺省为off
set timing off 显示每条sql命令的耗时,缺省为off
set verify off 显示替代变量被替代前后的语句
针对中文问题,需要设置环境变量NLS_LANG,值为oracle所对应的字符集,重启之后生效。
针对excel文本显示问题,又去sqlplus会自动将纯数字输出为科学计数法表示(感觉这个功能好鸡肋),所以这里我只好将所有的数字后面添加一个字符,表示这是字符串,期待更好的解决方案ing~