将数据作为XSV从oracle导出

问题描述 投票:0回答:2

我想从旧的Oracle数据库中导出一些数据(即某些查询结果')到文件中,这些值用指定的字符或字符序列分隔。 CSV文件就是一个示例。

仅将整数,varchars(不包括换行符),日期,其他基本值(?)放入结果集中,因此没有LOB或其他花哨的东西。只是纯数据,没有填充,没有包裹,字段分开并且可能被封闭。

实际中,我正在寻找一个简单的“ SELECT ... INTO OUTFILE FIELDS BY ... ... [OPTIONALLY] ENCLOSED BY'char'”,但是对于Oracle。

我尝试使用sqlplus,但是任何程序都可以,只要它在linux控制台上运行并且它不是基于Java的:-P。

很遗憾,我无法使用“ SET SQLFORMAT csv”,似乎不受支持。

到目前为止,我获得了类似以下的最佳结果:

printf“设置回显关闭新页面0页面大小0数组大小5000送出关闭修剪上的修剪池\ n选择字段1 ||'|' ||表格中的field2;” | sqlplus -S数据库> output_file

设置arraysize 5000(最大)可提供最佳性能,不幸的是,如果行长超过80个字符,则包装结果。

将行大小设置为30000(或什至32767)会取消换行,但是不幸的是,性能变得很差。我不想为每个查询指定最大行数(计算结果中每个字段的最大大小),希望性能会提高。

阅读了无数答案之后,我仍然没有找到应该既正确又性能出色的解决方案。我的下一个电话将是编写一个php文件来完成这项工作,但这是胡说八道,恕我直言,使用默认应用程序sqlplus应该会提供最佳性能...

任何想法?

oracle csv export sqlplus
2个回答
0
投票

我无法确定这组SET命令是否会有所帮助(通常我会使用它,但是-尝试一下。)>

set termout off 
set trimspool on 
set echo off 
set verify off 
set autoprint off 
set serveroutput off 
set arraysize 1000 
set pagesize 0
set linesize 100
set long 10000
set numwidth 10
set feedback off
set colsep ';'

col empno format 99999
col ename format a10
col sal format 999G990

spool emp.txt
select empno, ename, sal from emp;
spool off

在底部,您可以看到一些COL格式;如果您不需要它,请将其删除。

如果您确实不需要,请不要将行大小设置为该高数字(30.000)。

[还有,set colsep ';'会通过该分隔符将列分开(在此示例中为分号;可以是任何其他字符,例如您提到的|。]

为了加快线轴:

  • 关闭termout
  • 打开修剪池
  • 服务器
  • 上运行,而不在客户端PC上运行

0
投票

好吧,对于每个有此问题的人,这是答案:

© www.soinside.com 2019 - 2024. All rights reserved.