Экспорт SQLPlus в CSV (проблема с форматом вывода) - PullRequest
3 голосов
/ 28 января 2011

У меня возникла проблема с интерфейсным скриптом, который должен был экспортировать содержимое некоторой таблицы базы данных 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», как я могу включить это значение в формат экспорта (сейчас это не так).

STEP2: загрузка 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 ]

2 голосов
/ 28 января 2011

SET LINESIZE 0 недопустимо, значение должно быть в диапазоне от 1 до 32767. Поэтому я представляю, что оно оборачивает содержимое в длину строки по умолчанию, равную 80, если вы уже не установили ее в glogin сценарий.

1 голос
/ 28 января 2011

Если вы префиксите любые строки кода (по крайней мере) четырьмя пробелами в SO, тогда он будет отформатирован правильно, например,

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

Похоже, вам может понадобиться заменить любые встроенные символы новой строки всохраненные данные ....

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

И я не уверен насчет установки размера линии на 0.

...