SQLPlus导出为CSV(输出格式问题)

时间:2011-01-28 09:35:44

标签: oracle csv sqlplus export-to-csv

我遇到了一个接口脚本的问题,它应该将ORACLE数据库的某些表的内容导出到CSV文件中,然后将这些CSV导入到MYSQL数据库中。

第1步:SQLPlus导出为CSV

set headsep off  
set heading off
set term off
set echo off
SET  RECSEPCHAR \n
set pagesize 0
set linesize 0
trimspool on
SET FEEDBACK OFF
spool as_ex_feature.csv
select '"AS'||'"|"'||feature_group||'"|"'||feature_desc||'"|"
    ||feature_order||'"|"'||prod_code||'"'
from MYVIEW WHERE MYCONDITIONS;
spool off;

- >这一步是生成CSV文件,但格式似乎不正确,因为我可以在输出中找到一些回车。 你还会在STEP2中看到我们定义了一个“ENCLOSED BY”值,我怎么能把它包含在导出格式中(现在似乎不是这样)。

第2步:MYSQL加载

LOAD DATA INFILE 'mycsvfile' REPLACE INTO TABLE `mt_feature` 
FIELDS TERMINATED BY '|'
ENCLOSED BY '"' 
ESCAPED BY '\\'
LINES TERMINATED BY '\n';

由于某些技术原因,必须重建此脚本,并且Mysql部分尚未更改,并且正常处理正常的CSV文件。

问题似乎来自SQLPlus导出,我需要承认我对此没有太多了解。也许我应该使用另一种方法来生成这些文件?

如果您需要其他详细信息,请告诉我,我感到失明......


在oracle 10g,Linux,Mysql 4.x

上运行的脚本

谢谢!

2 个答案:

答案 0 :(得分:2)

SET LINESIZE 0无效,值必须介于1和32767之间。所以我想它将内容包装在默认行长度,即80,除非你已经将它设置在{ {1}}脚本。

答案 1 :(得分:1)

如果你在SO中用(至少)四个空格作为任何代码行的前缀,那么它将被正确格式化,例如。

select "AS'||'"|"'||
    feature_group||'"|"'||
    feature_desc||'"|"'||
    feature_order||'"|"'||
    prod_code||'"' 
from MYVIEW 
WHERE MYCONDITIONS;

听起来您可能需要替换存储数据中的任何嵌入式换行符....

SELECT "AS'||'"|"'||
    TRANSLATE(feature_group, CHR(10), '\\n') ||'"|"'||
(etc).

我不确定将lineize设置为0。