【发布时间】:2015-08-02 03:34:55
【问题描述】:
我有一个脚本,通过命令行将数据(包括 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;
我在这里做错了什么?我还尝试了其他一些连接方法,例如改用||'","'||,但这似乎也不起作用。
【问题讨论】:
-
您检查过数据中的空格吗?尝试在列周围添加 TRIM()。
-
数据中没有空格,TRIM() 似乎不起作用。需要明确的是,我的输出如下所示: "VALUE" /s/s/s/s/s/s/s/s/s/s,"VALUE2"/s/s/s/s/s/s/ s/s/s/s/s , /s/s/s/s/s/s/s"VALUE3" /s/s/s/s/s/s/s/. "" 内的输出没问题。
-
忽略我上面的评论,看看我发布的答案。
标签: sql oracle-sqldeveloper sqlplus