不安装oracle使用sqlplus工具

    今天打算写个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

其中get_tables.sql是需要执行的数据库查询语句

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~



你可能感兴趣的:(不安装oracle使用sqlplus工具)