请教,关于在Oracle快速导入数据以及导出文本的一些问题。

beerfroth 2004-10-15 07:24:26
大家好,小生在这里有一些困扰已久的问题,想请教大家:
在visual fox pro里面,我们可以通过append from 语句倒入各种格式的文本文件到数据库里面去,也可以通过copy to 命令把数据库导出为各种数据文件格式(包括文本文件格式)。
因为处理的数据量增大了,现在我改用oracle进行处理,但是oralce里面好像没有类似vfp的导入导出语句,结果严重影响了工作效率,现在希望各位指点一下我,指导我几条快速导入导出数据的捷径。
下面的例子,假设oracle要导入或者导出的表格名称为:test

1、导入文本文件到数据库,其中文本文件记录的字段之间采用分隔符隔开(比如“|”等)
在foxpro里面,可以使用以下语句:append from exampl1.txt delimite with char '|'
请问,在oracle里面又有什么办法可以实现这样的功能?并且还可以应用在编程里面(比如delphi编程)
另外,需要考虑的是,假如这个不是空表,我希望导入的数据:
1)覆盖以前所有的记录,只保留现在导入的这些记录;
2)保留以前所有的记录,同时把现在的这些记录都添加到原有记录的后面。

2、导入文本文件到数据库,其中文本文件的纪录是定长的,每个字段也都是定长的。
在foxpro里面,可以使用以下语句:append from example2.txt sdf
在oralce里面又如何实现呢?
同样地,也要考虑第一点的那两种情况。

3、和第一点相反,假如我要把test表格里面的数据导出到文本文件,同一纪录里面的各个字段之间采用分隔符分隔,比如“|”
在vfp里面,可以使用以下语句实现:copy to example3.txt delimite with char '|'
请问,在oracle里面,又是如何实现的呢?

4、和第二点相反,假如我要把test表格里面的数据导出到文本文件,记录等长,并且每个字段都等长,要导出这个文本文件,字段之间不用任何分隔符。
在vfp里面,使用:copy to example4.txt sdf
请问,在oracle里面,又是如何实现的?

很急啊,各位大虾,拜托了。
...全文
302 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmgowin 2004-10-15
  • 打赏
  • 举报
回复
spool的用法很简单,你按上面的方法操作一次就会清楚了
需要注意的就是需要设置一下spool的文本信息内容,如
set pagesize 0等,将执行的sql和列名等不要显示出来,其它的也没什么

程序调用sqlldr的话也只是调用shell执行sqlldr命令,没有什么特殊的啊
zmgowin 2004-10-15
  • 打赏
  • 举报
回复
导入不同的文件的话,可以将控制文件中的infile一行删除,在调用sqlldr的时候加上data=filename就可以了

如果要象程序的内部函数进行调用有些困难

beerfroth 2004-10-15
  • 打赏
  • 举报
回复
你说,
sqlldr本来就是在dos下运行的

我的意思是说,能不能不通过外部调用,而是在delphi里面使用类似内部函数这样的方式进行调用,有没有办法?
beerfroth 2004-10-15
  • 打赏
  • 举报
回复
举例,假如是如下的方法,
我们可以用Oracle的sqlldr工具来导入数据。例如:
sqlldr scott/tiger control=loader.ctl
控制文件(loader.ctl) 将加载一个外部数据文件(含分隔符). loader.ctl如下:
load data
infile 'c:\data\mydata.csv'
into table emp
fields terminated by "," optionally enclosed by '"'
( empno, empname, sal, deptno )

mydata.csv 如下:
10001,"Scott Tiger", 1000, 40
10002,"Frank Naude", 500, 20

如果我本身是导入不同的文件名,那么我岂不是每次都要向办法修改infile 的数据文件名?

spool的bat,能不能具体一点说说看?

唉,没有办法,我是一个大大的菜鸟。还请你不要嫌我烦啊。
zmgowin 2004-10-15
  • 打赏
  • 举报
回复
sqlldr本来就是在dos下运行的
zmgowin 2004-10-15
  • 打赏
  • 举报
回复
sqlldr可以直接在程序中调用,
spool写成bat文件,在程序中调用问题也不大
beerfroth 2004-10-15
  • 打赏
  • 举报
回复
好像都是通过工具的方法阿,我现在考虑到一个应用的问题。假如我是用delphi来进行编程的话,好像没有办法在程序的执行过程中调用这些工具阿。
有没有办法实现?
zmgowin 2004-10-15
  • 打赏
  • 举报
回复
oracle中文本数据的导入可以利用sqlldr,导出成文本可以用spool命令实现,当然也可以借助第三方工具,例如golder,dts等
sqlldr的具体使用你可以参看
http://blog.csdn.net/s98/archive/2004/10/05/125627.aspx
这些已经可以实现你的1、2点

至于第3、4点可以用spool命令实现,spool的用法很简单,oracle导出成文本的时候默认是没有分隔符的
spool命令的写法就是:
spool filename
select ... from tab_name where ...;
spool off
要什么格式可以在select中处理

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧