从Command SQL中导出Oracle SQL到CSV

时间:2015-05-20 18:08:21

标签: sql oracle-sqldeveloper sqlplus

我有一个脚本,可以通过命令行将数据(包括CLOB)从Oracle SQL导出到CSV。当我执行脚本然后通过Python查看数据时,我获得每行的正确列数以及正确的数据。但是,每个单元格中都有额外的空格。我的方法:

file.sql

spool "/home/username/file.csv";
SELECT /*csv*/ '"'||COLUMN_1||'"',
'"'||COLUMN_2||'"',
'"'||DBMS_LOB.substr(COLUMN_3,3000)||'"',
        ...
'"'||COLUMN_N||'"'
FROM TABLE; 
spool off; 

file.sh

export ORACLE_SID=MYSID
sqlplus / as sysdba <<EOF
conn myUser/myPass 
set heading off
set termout off 
set trimout off
set newpage none
set pages 0
set feedback off
set echo off
set verify off
set trimspool on
set sqlprompt "" 
set colsep ","
set linesize 32767      
@/home/username/file.sql
exit
EOF

当我尝试通过连接修剪空间时,整个事情就会崩溃(不相等的列长度,应该没有的断点等等):

修改后的file.sql

spool "/home/username/file.csv";
SELECT /*csv*/ '"'||COLUMN_1||'"'||','
'"'||COLUMN_2||'"'||','
'"'||DBMS_LOB.substr(COLUMN_3,3000)||'"'||','
        ...
'"'||COLUMN_N||'"'
FROM TABLE; 
spool off;

我在这里做错了什么?我还尝试了一些其他的连接方法,比如使用||'","'||,但这似乎也没有用。

2 个答案:

答案 0 :(得分:-1)

检查一下:从这篇文章:https://community.oracle.com/thread/2357292

为每个选定的列指定别名。然后它为我工作。

SELECT /*csv*/ '"'||COLUMN_1||'"' COL1,
'"'||COLUMN_2||'"'                COL2,
'"'||DBMS_LOB.substr(COLUMN_3,3000)||'"' COL3,
        ...
'"'||COLUMN_N||'"' COLN
FROM TABLE; 

编辑:在Toad中添加了我的例子。

在Toad,我运行这个:

set heading off
set termout off 
set trimout off
set newpage none
set pages 0
set feedback off
set echo off
set verify off
set trimspool on
set trimout on
set tab off
set sqlprompt "" 
set colsep ","
set linesize 32767      

spool c:\temp\efs.txt;

SELECT '"'||'A'||'"',
'"'||'B'||'"',
'"'||'C'||'"'
FROM dual; 

spool off;

并获得:

"A"          ,"B"          ,"C"

当我添加列别名时:

SELECT '"'||'A'||'"' a,
'"'||'B'||'"' b,
'"'||'C'||'"' c
FROM dual; 

我明白了:

"A","B","C"

请参阅此主题以获取其他方法和解释(我们的工作方式):https://community.oracle.com/thread/1081068

答案 1 :(得分:-1)

怎么样:

select col1 || ',' || col2 || ',' || col3 from tab1;

select '"' || col1 || '",' || '"' || col2 || '",' || '"' || finalcol || '"'  from tab1;

e.g。

SQL> select '"' || AD_ID || '",' || '"' || AD_SOURCETEXT || '",' || '"' || PRODUCT_ID || '"'  from pm.print_media where rownum < 4;

'"'||AD_ID||'",'||'"'||AD_SOURCETEXT||'",'||'"'||PRODUCT_ID||'"'
--------------------------------------------------------------------------------
"11001","TIGER2 Mousepad
Product Number: 2056   Price:  $8    Today's Sale Price

"12001","TIGER2 Mousepad
Product Number: 2056   Price:  $8    Today's Sale Price

"13001","TIGER2 3106 Keyboard
Product Number: 3106
* KB 101/EN keyboard is a sta