oracle数据与文本导入导出源码示例

oracle提供了sqlldr的工具,有时需要讲数据导入到文本,oracle的spool可以轻松实现。

方便的实现oracle导出数据到txt、txt导入数据到oracle。

一、导出数据到txt

用all_objects表做测试

SQL> desc all_objects;
 Name                   Null?  Type
 ----------------------------------------- -------- ----------------------------
 OWNER                   NOT NULL VARCHAR2(30)
 OBJECT_NAME                NOT NULL VARCHAR2(30)
 SUBOBJECT_NAME                   VARCHAR2(30)
 OBJECT_ID                 NOT NULL NUMBER
 DATA_OBJECT_ID                   NUMBER
 OBJECT_TYPE                    VARCHAR2(19)
 CREATED                  NOT NULL DATE
 LAST_DDL_TIME               NOT NULL DATE
 TIMESTAMP                     VARCHAR2(19)
 STATUS                       VARCHAR2(7)
 TEMPORARY                     VARCHAR2(1)
 GENERATED                     VARCHAR2(1)
 SECONDARY                     VARCHAR2(1)

拿object_id,object_name做导出、导入测试。

一些设置满足数据导出的样式:

vi exp_table.sql

set line 1000     --设置行的长度
set pagesize 0    --输出不换页
set feedback off   --默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
set heading off    --不显示表头信息
set trimspool on   --如果trimspool设置为on,将移除spool文件中的尾部空
set trims on     --去掉空字符
set echo off;      --显示start启动的脚本中的每个sql命令,缺省为on
set colsep '|'     --设置分隔符
set termout off    --不在屏幕上显示结果
spool db1.txt     --记录数据到db1.txt
select object_id,object_name from all_objects; --导出数据语句
spool off       --收集完毕
exit

一切就绪后导出数据:

[oracle@centos5 ~]$ sqlplus test/test @exp_table.sql
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jun 13 16:35:14 2013
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@centos5 ~]$ sed -i 's/ //g' db1.txt --可选,去除每行开头部分的空格
[oracle@centos5 ~]$ more db1.txt 20|ICOL$
44|I_USER1
28|CON$
15|UNDO$
29|C_COBJ#
3|I_OBJ#
25|PROXY_ROLE_DATA$

导出后检查数据的记录数是否正确

[oracle@centos5 ~]$ cat db1.txt |wc -l
49988
[oracle@centos5 ~]$ sqlplus test/test
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jun 13 16:36:21 2013
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select count(*) from all_objects;
 COUNT(*)
----------
   49988 --数据正确

二、从txt导入数据到oracle

sqlldr是通过一个control文件设定后,从文本导入数据

建立一张测试表

SQL> create table tb_sqlldr (id number,name varchar2(50));
Table created.

建立一个control文件

vi tb_sqlldr.ctl

load data
infile 'db1.txt'      --数据来源文本
append into table tb_sqlldr  --数据导入到表tb_sqldr中,导入方式为追加,如果想覆盖
fields terminated by "|"  --4、字段终止于X'09',是一个制表符(tab)
(id,name)          --定义对应的字段名称,注意顺序

导入数据分成四种模式,可以根据需求选择:

APPEND // 原先的表有数据 就加在后面

INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值

REPLACE // 原先的表有数据 原先的数据会全部删除

TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据

执行导入操作

sqlldr userid=test/test control=tb_sqlldr.ctl

差不多5w的数据短短2s解决

执行导入后验证数据

SQL> select count(*) from tb_sqlldr;
 COUNT(*)
----------
   49988

导入成功

再执行一次导入操作,由于设置为追加:

SQL> select count(*) from tb_sqlldr;
 COUNT(*)
----------
   99976

记录翻倍

sqlldr还有很多参数供选择,比如log、bad这些,查看帮助即可。

[oracle@centos5 ~]$ sqlldr
SQL*Loader: Release 10.2.0.4.0 - Production on Thu Jun 13 17:07:26 2013
Copyright (c) 1982, 2007, Oracle. All rights reserved.

Usage: SQLLDR keyword=value [,keyword=value,...]
Valid Keywords:
  userid -- ORACLE username/password
  control -- control file name
    log -- log file name
    bad -- bad file name
   data -- data file name
  discard -- discard file name
discardmax -- number of discards to allow     (Default all)
   skip -- number of logical records to skip  (Default 0)
   load -- number of logical records to load  (Default all)
  errors -- number of errors to allow      (Default 50)
   rows -- number of rows in conventional path bind array or between direct path data saves
        (Default: Conventional path 64, Direct path all)
 bindsize -- size of conventional path bind array in bytes (Default 256000)
  silent -- suppress messages during run (header,feedback,errors,discards,partitions)
  direct -- use direct path           (Default FALSE)
  parfile -- parameter file: name of file that contains parameter specifications
 parallel -- do parallel load           (Default FALSE)
   file -- file to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions (Default FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable (Default FALSE)
commit_discontinued -- commit loaded rows when load is discontinued (Default FALSE)
 readsize -- size of read buffer         (Default 1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (Default NOT_USED)
columnarrayrows -- number of rows for direct path column array (Default 5000)
streamsize -- size of direct path stream buffer in bytes (Default 256000)
multithreading -- use multithreading in direct path
 resumable -- enable or disable resumable for current session (Default FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE (Default 7200)
date_cache -- size (in entries) of date conversion cache (Default 1000)
PLEASE NOTE: Command-line parameters may be specified either by
position or by keywords. An example of the former case is 'sqlldr
scott/tiger foo'; an example of the latter is 'sqlldr control=foo
userid=scott/tiger'. One may specify parameters by position before
but not after parameters specified by keywords. For example,
'sqlldr scott/tiger control=foo logfile=log' is allowed, but
'sqlldr scott/tiger control=foo log' is not, even though the
position of the parameter 'log' is correct.

总结

以上就是本文关于oracle数据与文本导入导出源码示例的全部内容,感兴趣的朋友可以参阅:ORACLE SQL语句优化技术要点解析、oracle 数据库启动阶段分析、oracle数据库导入导出命令解析等,如有不足之处,欢迎留言指正,希望对大家有所帮助。感谢大家对我们网站的支持。

(0)

相关推荐

  • LINUX下Oracle数据导入导出的方法详解

    本文讲述了LINUX下Oracle数据导入导出的方法.分享给大家供大家参考,具体如下: 一. 导出工具 exp 1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移   它有三种模式: a.  用户模式: 导出用户所有对象以及对象中的数据: b.  表模式: 导出用户所有表或者指定的表: c.  整个数据库: 导出数据库中所有对象. 2. 导出工具exp交互式命令行方式的使用的例子: $ex

  • Oracle 使用TOAD实现导入导出Excel数据

    在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的.Quest Software为此提供了高效的Oracle应用开发工具-Toad.在Toad的新版本中,还加入了DBA模块,可以帮助DBA完成许多日常管理工作.它最大的特点就是简单易用,访问速度快.使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作.Toad由Oracle开发专家专门为开发人员

  • oracle 数据泵导入导出介绍

    1.首先建立目录: create directory 目录名称 as '数据库服务器上的一个目录',如: create directory 别名 as 'd:\服务器目录名'; 将导入或导出的文件放在这个目录下 2.导出及导入 以SID=orcl,导出dmp的账号为test,导入dmp的账号为test为例. 若将数据从sfz中导出: expdp test/test@orcl directory=别名 dumpfile=导出文件名 导入到test中: impdp test/test@orcl di

  • oracle数据库导入导出命令使用方法

    最近做项目的时候遇到过oracle数据库导入导出,在这里我做下记录,防止自己忘记了,有什么不对或者不足的地方,欢迎广大博友拍砖,哈哈~导出命令:1)单表导出:exp 用户名/密码@服务器别名 tables=表名 file=d:\名称.dmp 复制代码 代码如下: exp jm110/jm110@120_2 tables=ajb file=d:\ajb.dmp 多张表: 复制代码 代码如下: exp jm110/jm110@120_2 tables=(ajb,jjdwb) file=d:\ajb2

  • oracle数据与文本导入导出源码示例

    oracle提供了sqlldr的工具,有时需要讲数据导入到文本,oracle的spool可以轻松实现. 方便的实现oracle导出数据到txt.txt导入数据到oracle. 一.导出数据到txt 用all_objects表做测试 SQL> desc all_objects; Name Null? Type ----------------------------------------- -------- ---------------------------- OWNER NOT NULL

  • Oracle数据泵的导入与导出实例详解

    前言 今天王子要分享的内容是关于Oracle的一个实战内容,Oracle的数据泵. 网上有很多关于此的内容,但很多都是复制粘贴别人的,导致很多小伙伴想要使用的时候不能直接上手,所以这篇文章一定能让你更清晰的理解数据泵. 开始之前王子先介绍一下自己的环境,这里使用的是比较常用的WIN10系统,Oracle数据库也是安装在本机上的,环境比较简单. 数据泵的导入 导入的数据文件可能是别人导出给你的,也可能是你自己导出的,王子这里就是别人导出的,文件名字是YD.DMP. 在进行操作之前,一定要问清楚表空

  • Python编写一个验证码图片数据标注GUI程序附源码

    做验证码图片的识别,不论是使用传统的ORC技术,还是使用统计机器学习或者是使用深度学习神经网络,都少不了从网络上采集大量相关的验证码图片做数据集样本来进行训练. 采集验证码图片,可以直接使用Python进行批量下载,下载完之后,就需要对下载下来的验证码图片进行标注.一般情况下,一个验证码图片的文件名就是图片中验证码的实际字符串. 在不借助工具的情况下,我们对验证码图片进行上述标注的流程是: 1.打开图片所在的文件夹: 2.选择一个图片: 3.鼠标右键重命名: 4.输入正确的字符串: 5.保存 州

  • 关于androidstuio导入系统源码的问题

    最近公司需要做一些将系统源码导出来,然后加入一些功能,在导入androidstudio过程中遇到过一些问题,这里记录下,方便以后需要. 一般导入成功的都是系统比较相对独立的app,比如计算器.Schedule power on off等,网上查阅一些资料后,最终解决. 这里以Schedule power on off为例. 1.导出Schedule power on off源码,路径为/package/apps/ 如图: 新建androidstudio项目,导入相关代码以及相关资源文件,rebu

  • Oracle数据库表备份导入导出dmp的方式及踩坑记录

    目录 一.备份导出前的注意事项 二.导出的两种方式 2.1.使用exp导出 2.2.使用数据泵expdp导出 三.在备份时遇到的坑 附:Oracle导出指定用户下dmp文件 总结 一.备份导出前的注意事项 1.导出导出的时候需要注意数据库的字符集是否一致,使用工具导入的话也需要确认工具的字符集 --查询服务端的编码命令 SELECT * FROM Nls_Database_Parameters where parameter = 'NLS_CHARACTERSET'; --查询客户端软件的编码命

  • python爬虫今日热榜数据到txt文件的源码

    今日热榜:https://tophub.today/ 爬取数据及保存格式: 爬取后保存为.txt文件: 部分内容: 源码及注释: import requests from bs4 import BeautifulSoup def download_page(url): headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko

  • 如何导入spring源码到IDEA

    环境:IDEA2019.3, jdk1.8.0_191,spring-framework-5.0.5.RELEASE,gradle-4.4.1 前期准备 1.访问spring官网下载spring framework源码 spring源码放在了github,点击如下图中的按钮访问(有可能访问不了github官网,可参考此处) 如下图步骤选择要下载的spring源码版本 点击code–>Download ZIP下载 解压到某个目录下 2.安装gradle 到解压的spring源码目录下spring-

  • vue Proxy数据代理进行校验部分源码实例解析

    目录 initProxy 触发代理 数据过滤 总结 initProxy 数据拦截的思想除了为构建响应式系统准备,它也可以为数据进行筛选过滤,我们接着往下看初始化的代码,在合并选项后,vue接下来会为vm实例设置一层代理,这层代理可以为vue在模板渲染时进行一层数据筛选 Vue.prototype._init = function(options) { // 选项合并 ... { // 对vm实例进行一层代理 initProxy(vm); } ... } initProxy // 代理函数 var

  • Django动态随机生成温度前端实时动态展示源码示例

    目录 随机生成温度 前端动态实时 一.django APScheduler定时任务 简介 安装 使用步骤 基础组件 二.dwebsocket 简介 安装 使用方法 属性和方法 为了模拟随机的温度显示,在models中的表中的数据 views 路由 VUE中的代码 随机生成温度 前端动态实时 一.django APScheduler定时任务 简介 APScheduler的全称是Advanced Python Scheduler. 它是一个轻量级的 Python 定时任务调度框架. APSchedu

  • java常用Lambda表达式使用场景源码示例

    目录 引导语 1.数据准备 2.常用方法 2.1.Filter 2.2.map 2.3.mapToInt 2.4.flatMap 2.5.distinct 2.6.Sorted 2.7.peek 2.8.limit 2.9.reduce 2.10.findFirst 2.11.groupingBy&&toMap 3.总结 引导语 我们日常工作中,Lambda 使用比较多的场景,就是 List 或 Map 下的 Lambda 流操作,往往几行代码可以帮助我们实现多层 for 循环嵌套的复杂代

随机推荐