1

Oracle SQL Loader を使用して外部 csv をロードする場合、制御ファイルでフィールドを相互に直接マップする方法はありますか?

現時点では単純な読み込みを行っているため、ソース フィールドの位置は重要です。それ以外の方法はありますか?したがって、代わりに:

load data
into table1
fields terminated by "," optionally enclosed by '"'
(destination_field1, destination_field2, destination_field3)

次のようにします。

load data
into table1
fields terminated by "," optionally enclosed by '"'
(
source_field2 => destination_field1,
source_field1 => destination_field2,
source_field3 => destination_field3
)

編集:

主な理由は、ソース ファイル内の列の順序が変更される可能性があるためです。そのため、どのフィールドが 1 番目、2 番目などになるかわかりません。

4

1 に答える 1

3

制御ファイルには、Oracle 関数による任意のデータ処理を含めることができます。
たとえば、次のコードは列 1 と 2 を交換し、さらにsource_field2数値に変換して、間違った値を黙って null に置き換えます。

load data
append
into table SCHEMA.TABLE
fields terminated by ';' optionally enclosed by '"'
trailing nullcols
(
  source_field1     BOUNDFILLER,
  source_field2     BOUNDFILLER,
  source_field3     BOUNDFILLER,
  destination_field1 "to_number(regexp_substr(:source_field2, '^[-0-9,]*'),'9999999999D999','NLS_NUMERIC_CHARACTERS='', ''')",
  destination_field2 ":source_field1",
  destination_field3 ":source_field3"
)
于 2013-08-18T16:18:26.910 に答える