我遇到了一个接口脚本的问题,它应该将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导出,我需要承认我对此没有太多了解。也许我应该使用另一种方法来生成这些文件?
如果您需要其他详细信息,请告诉我,我感到失明......
谢谢!
答案 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。