4

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

STEP1: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 上运行的脚本

谢谢!

4

2 回答 2

3

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

于 2011-01-28T10:09:37.860 回答
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).

而且我不确定将 linesize 设置为 0。

于 2011-01-28T10:10:00.927 回答