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 の間である必要があります。したがって、gloginスクリプトで既に設定されていない限り、デフォルトの行の長さである 80 でコンテンツをラップしていると思います。

于 2011-01-28T10:09:37.860 に答える
1

SO で (少なくとも) 4 つのスペースをコード行の前に付けると、正しくフォーマットされます。

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

保存されたデータに埋め込まれた改行文字を置き換える必要があるように思えます....

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

そして、線サイズを0に設定することについてはわかりません。

于 2011-01-28T10:10:00.927 に答える