1

複数のファイル (f1.log、f2.log、f3.log など) があります。各ファイルには、;&で=区切られた形式のデータが含まれています。(新しい行は で区切られ;、フィールドは で区切られます=) 例

f1 のデータ:

1=a;2=b;3=c

f2 のデータ:

1=p;2=q;3=r

これらすべてのファイルを読み取り、データを次の形式でテーブルにインポートする必要があります。

filename  number  data

f1        1       a

f1        2       b

f1        3       c

f2        1       p
[...]

私はSQLが初めてです。どうやってそれを行うことができますか?

4

1 に答える 1

3

SQL*Loaderを使用して、ファイルをテーブルに取得します。次のようなテーブルを作成したとします。

create table FLOG
(
  FILENAME   varchar2(1000)
 ,NUM        varchar2(1000)
 ,DATA       varchar2(1000)
);

次に、次の制御ファイルを使用できます。

LOAD DATA
INFILE 'f1.log' "str ';'"
truncate INTO TABLE flog
fields terminated by '=' TRAILING NULLCOLS
(
   filename constant 'f1'
   ,num  char 
   ,data char 
)

ただし、ファイルごとに異なる制御ファイルが必要になります。これは、シェル スクリプトを使用して制御ファイルを動的に作成することで実行できます。サンプル シェル スクリプトは次のようになります。

cat >flog.ctl <<_EOF
LOAD DATA
INFILE '$1.log' "str ';'"
APPEND INTO TABLE flog
fields terminated by '=' TRAILING NULLCOLS
(
filename constant '$1'
,num  char
,data char
)
_EOF

sqlldr <username>/<password>@<instance> control=flog.ctl data=$1.log

そのまま保存しflog.shて、次のように実行できます。

./flog.sh f1
./flog.sh f2
于 2012-02-02T12:20:04.183 に答える