方案一:使用SQLPlus的Spool命令。Spool是SQLPlus的命令,不是SQL语句。通过Spool可以将SQL语句(导出的话主要是使用Select)的执行结果导出到指定的文件中,即“所见即所得”:使用Spool命令后,在SQLPlus中执行SQL语句打印在屏幕上的结果会原样导出到文件中。为了控制导出数据的格式,Spool提供了一系列Set命令来设置导出的格式,当然也可以在Select语句中直接设置格式。

使用Spool导出数据的示例(在命令行执行):

SQL> spool d:\data.cvs                【指定导出文件,导出开始】

SQL> set echo off;                       【不显示执行的SQL命令】

SQL> set feedback off;                【关闭“已选择XX行”的提示】

SQL> set heading off;                  【去掉select结果的字段名,只显示数据】

SQL> set termout off;                  【关闭屏幕上的SQL执行结果显示】

SQL> set trimspool on;                【去除重定向(Spool)输出时每行的拖尾空格】

SQL> set pagesize 0;                   【输出每页行数,缺省为24,为了避免分页,可设定为0】

SQL> select 'This is a test data file for Spool' from dual;

This is a test data file for Spool

SQL> select no,class,name from database;

20110001 1101 Mysql

20110002 1101 Oracle

20110003 1102 DB2

20110004 1103 SQL Server

SQL> select no||'-'||class||'-'||name from database;         【在Select中设置格式】

20110001-1101-Mysql

20110002-1101-Oracle

20110003-1102-DB2

20110004-1103-SQL Server

SQL> spool off;                          【导出结束】

查看导出文件d:\data.cvs,内容如下:

SQL> set echo off;

SQL> set feedback off;

SQL> set heading off;

SQL> set termout off;

SQL> set trimspool on;

SQL> set pagesize 0;

SQL> select 'This is a test data filefor Spool' from dual;

This is a test data file for Spool

SQL> select no,class,name fromdatabase;

20110001 1101 Mysql

20110002 1101 Oracle

20110003 1102 DB2

20110004 1103 SQL Server

SQL> select no||'-'||class||'-'||namefrom database;

20110001-1101-Mysql

20110002-1101-Oracle

20110003-1102-DB2

20110004-1103-SQL Server

SQL> spool off;

这并不是我们想要的结果,我们只想输出数据,而不想记录SQL命令。

SQL> set echo off;                      【不显示执行的SQL命令】

SQL> set termout off;                 【关闭屏幕上的SQL执行结果显示】

这两个设置似乎并没有生效。前面说过Spool是“所见即所得”,因为上述命令是在SQLPlus命令行中一句句输入的,因此Spool中记录了你输入的所有内容。如何才能得到只有数据的文件呢?解决办法就是把这些命令(包括Set和Select)写在一个.sql的脚本文件中,如下:

spool.sql内容

spool d:\data.csv

set echo off;

set feedback off;

set heading off;

set termout off;

set trimspool on;

set pagesize 0;

select 'This is a test data file for Spool' from dual;

select no,class,name from database;

select no||'-'||class||'-'||name from database;

spool off;

在SQLPlus中直接执行这个脚本

SQL> @d:\spool.sql

查看导出文件d:\data.cvs,内容如下:

This is a test data file for Spool

20110001 1101 Mysql

20110002 1101 Oracle

20110003 1102 DB2

20110004 1103 SQL Server

20110001-1101-Mysql

20110002-1101-Oracle

20110003-1102-DB2

20110004-1103-SQL Server

Spool提供了一系列Set命令来设置导出的格式,更多Spool Set命令请参考《SQLPlusSpool备忘》。

方案二:使用Oracle自带的exp工具。exp/imp是Oracle自带的一对数据导出/导入工具,常用于数据恢复与备份,使用exp/imp工具可以实现单表导出、用户导出、数据库导出三个级别的导出操作。exp/imp分交互式、非交互式两种处理方式。关于imp导入请参考《Oracle数据导入》。

使用交互式exp的示例:

(交互式导出时大多数参数都有缺省值,如果选用缺省值,直接回车即可。)

$exptest/test123@appdb

Enter arrayfetch buffer size: 4096 >   【buffer大小】

Export file:expdat.dmp > m.dmp              【导出的文件名】

(1)E(ntiredatabase), (2)U(sers), or (3)T(ables): (2)U > 3   【导出模式】

Export tabledata (yes/no): yes >         【是否导出数据,NO表示只导出表结构】

Compressextents (yes/no): yes >         【是否压缩】

Export donein ZHS16GBK character set and ZHS16GBK NCHAR characterset     【字符集设置】

Aboutto export specified tables via Conventional Path ...

Table(T) orPartition(T:P) to be exported: (RETURN to quit) > cmamenu   【要导出的表名】

.. exporting table                         CMAMENU        4336 rows exported

Table(T) orPartition(T:P) to be exported: (RETURN to quit)>         【回车退出】

Exportterminated successfully without warnings.

使用非交互式exp的示例:

把scott用户里两个表emp,dept导出到文件/directory/scott.dmp

$exp scott/tiger tables=(emp,dept)file=/directory/scott.dmp grants=y

将数据库中system用户与sys用户的表导出

exp system/manager@TEST file=d:\daochu.dmpowner=(system,sys)

将数据库TEST完全导出到D:\daochu.dmp中

exp system/manager@TEST file=d:\daochu.dmp full=y

在exp里面加上导出emp的查询条件job='salesman' and sal<1600

【用的比较少,把满足条件的记录生成临时表后再exp会方便一些】

$exp scott/tiger tables=emp query=\"wherejob=\'salesman\' and sal\<1600\" file=/directory/scott2.dmp

username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改。

$expparfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmpfilesize=2000M log=/directory2/username_exp.log

参数文件username.par内容

userid=username/userpassword

buffer=8192000

compress=n

grants=y

导出全库数据。file参数可以设置多个文件,导出到多个文件中,每个文件最大2GB,exp只生成最少的导出文件,譬如导出的数据不足2GB,exp只生成/tmp/2004020601.dmp。如果file列表中的文件太少,能存放所有的导出数据,exp会提示用户输入文件名。出过程记录日志。filesize限制文件大小,因为有的文件系统的文件有大小限制。

experid=cams/cams@cams ll=y file=(/tmp/2004020601.dmp,/tmp/2004020602.dmp, /tmp/2004020603.dmp) filesize=2GB log=/tmp/20040206.log

方案三:使用Pro*C。Pro*C程序实际是内嵌有SQL语句或PL/SQL块的C程序,在Pro*C程序中可以嵌入SQL语句来完成动态地建立、修改、删除数据库中的表,查询、插入、修改和删除数据库表中的记录,还可以实现事务的提交和回滚。在Pro*C程序中还可以嵌入PL/SQL块,以改进应用程序的性能,特别是在网络环境下,可以减少网络传输和处理的总开销。使用Pro*C进行数据导出其实是将SQL、结构体、文件读写结合使用,将数据库表的数据以结构体的形式导出到文件中。

因为Pro*C语法比较杂,通常出错都出在SQL语句错误、C语句错误、结构体字段与表结构不对应等。

关于Pro*C的示例待续……

oracle计算数据导出,oracle 数据导出相关推荐

  1. oracle点勾算提交吗,oracle表结构和数据导出时的一些勾选项说明

    使用pl/sql developer导出oracle数据库的表结构和表数据时,有一些勾选项供用户选择,需要用户根据实际情况进行勾选或取消. 导出方法如下: 一.只导出表结构 1.使用pl/sql de ...

  2. 使用 Oracle Datapump API 实现数据导出

    为什么80%的码农都做不了架构师?>>>    Oracle Datapump API 是基于PL/SQL实现的,是命令行方式下的补充.使用Datapump API可以将其逻辑备份特 ...

  3. asp sql 导出 excel_Mysql数据导出到excel基于python

    阅读本文大概需要 6分钟. 数据除了在测试平台显示,有时候也会习惯用excel以及邮件展示,那么我们可以在测试平台上加一个导出excel功能,方便操作,下面介绍主要代码以及逻辑. 使用操作数据库的py ...

  4. xlsxwriter进度条php,PHP导出Excel数据导出,前端进度条实现方式

    效果如上,结合layer组件以及ajax分页实现,具体代码如下 前端代码 用户数据导出 // 执行事件 function exportData() { var loading = layer.load ...

  5. java导出oracle到excel_java实现将oracle表中的数据导出到excel表里

    1.数据库连接类:Dbutil package sql2excel; import java.sql.Connection; import java.sql.DriverManager; import ...

  6. windows 导oracle用户,windows下Oracle导入导出用户数据

    Oracle导入导出用户数据 -- 导出用户 -- 一.新建目录.目录名称:third,目录路径:E:\OracleUserCeshi create directory third as 'E:\Or ...

  7. oracle 多表导出,oracle多表导出dmp

    dmp动态多路径,中国广告DMP的出路在哪儿?,oracle多表导出dmp,oracle导入dmp文件 1 将数据库 orcl 完全导出,用户名 scott 密码 123 导出到 D:\daochu. ...

  8. oracle 的导入导出,Oracle 导入导出详细介绍

    数据库version 导入导出工具 ( from )导出数据库 ( to )导入数据库 Expdp/Impdp 11.2.0.2.0 10.2.0.3.0 From 11g(11.2.0.2.0) t ...

  9. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  10. oracle两个表数据比较,oracle数据库两表数据比较

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...

最新文章

  1. Mongodb的的增删改查
  2. 深入理解Netty-从偶现宕机看Netty流量控制
  3. 白话Elasticsearch22- 深度探秘搜索技术之match_phrase_prefix实现search-time搜索推荐
  4. 第十届蓝桥杯java B组—试题B 不同子串
  5. linux防火墙文件找不到,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
  6. java2实用教程第5版第九章_java2实用教程(例子代码)第4版第九章.doc
  7. Oracle 数据库中较为复杂或典型的 SQL 语句的解读
  8. Servlet的配置
  9. 谈谈Tensorflow的dropout
  10. JSP 中 forward 转发 和 sendRedirect 重定向的区别
  11. Windows Server 2008 R2+SQL Server 2014 R2升级到Windows Server 2016+SQL Server 2016
  12. 基于python的客流统计_基于深度学习的客流量统计方法
  13. AR客户对账单(上月欠款)
  14. 油菜的做法及营养知识详细介绍
  15. pip使用详解/pip换源
  16. 使用Adobe illustrator (AI)快速制作图标
  17. input 标签中的 Hiden隐藏域
  18. 如何提升 Web 应用的代码质量
  19. python中的openpyxl模块
  20. MySQL之虚拟列的详细讲解

热门文章

  1. Django-admin注册model后一直404,路径都配置的正确
  2. 【ThreeJS基础教程-初识Threejs】1.5 选择合适的相机与相机切换
  3. 微信支付银行卡交易的限额是多少?
  4. IP协议,ARP协议
  5. Unity Mesh网格合并
  6. html设计动画小黄人,纯CSS3画出小黄人并实现动画效果_html/css_WEB-ITnose
  7. matlab 历史波动率,如何用Excel统计历史波动率
  8. 路由器至游戏服务器稳定性,如何改善路由器到游戏服务器的
  9. 初次尝试node爬虫(附赠前端和各种编程词库、coca20000词频表)
  10. 特斯拉自动驾驶使用的技术_为什么特斯拉不会使用激光雷达