1

SQLLoaderがパスから入力データファイルを読み取り、制御ファイルで指定された記述に基づいてデータをテーブルにロードするとします。最初に、入力するテーブルが作成されます。

create table sql_loader_1 ( load_time date, field_1 Numeric, field_2 varchar2(10) 

サンプル制御ファイル:load_1.ctl

load data 
infile 'load_1.dat' "str '\r\n'" 
insert into table sql_loader_1 
( 
 load_time sysdate, 
 field_2 position( 1:10),
 field_1 position(11:20)
) 

位置11から20はfield_1にロードされ、位置1から10はfield_2にロードされることに注意してください。フィールドload_timeには、ロードの現在の時刻(sysdate)が入力されます。

これがデータです。ファイルの名前(load_1.dat)は、制御ファイルのinfileステートメントで指定されていました。

load_1.dat

0123456789abcdefghij
**********##########
foo         bar
here comes a very long line 
and the next is 
short 

ここでは、データファイルに文字値(ie)abcdefghijが含まれているため、field_1(数値データ型)を検証します。

4

1 に答える 1

1

field_1を検証したいとしますが、検証が失敗した場合にどのようなアクションを期待しているのか明確ではありませんか?

他の2つの考え:

  1. 拒否された行に対して制御ファイルでBADFILEオプションを使用することを検討しましたか?

  2. SQL-Loaderで数値変換を処理する代わりに、データをテキストとしてロードし、数値に変換するか、データベースで1回処理します。これは簡単かもしれません。

于 2011-01-24T12:49:30.630 に答える