1

私のデータはこれです:

ID,SCORE_DATE,TYPE,SCORE,RAW_SCORE,RANK
A1234,2012-09-05 23:59:59,FOOTBALL_TEAM_MIDDLE_AND_OLD_1234,10,0.123,1
A5678,2012-09-05 23:59:59,FOOTBALL_TEAM_MIDDLE_AND_OLD_1234,20,0.456,2

CTLファイル:

load data           
infile 'E:\Data\Sample.csv'
badfile 'E:\Data\Sample.bad'
APPEND into table TABLE1    
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS               
(   
 DRIVER,
 STARTDTE "to_date(SUBSTR(:STARTDTE,1,10),'YYYY-MM-DD') - 27",
 TYPE  CONSTANT 'FOOTBALL',
 SCORE   ,
 RANKSCORE ":SCORE",
 RANK    ,
 ENDDTE "to_date(SUBSTR(:STARTDTE,1,10),'YYYY-MM-DD')",
 LOADDT     "sysdate"
)

これが私のテーブル構造です:

CREATE TABLE "TABLE1"
  (
    "DRIVER" VARCHAR2(50 BYTE),
    "STARTDTE" DATE,
    "SCORE"           NUMBER,
    "ENDDTE" DATE,
    "TYPE" VARCHAR2(20 BYTE),
    "RANK"       NUMBER,
    "RANKSCORE"  NUMBER,
    "LOADDT"     VARCHAR2(20 BYTE)
  );

ロードされたすべての行に対してエラーメッセージが表示されます:レコード3:拒否-テーブルTABLE1、列SCOREのエラー。ORA-01722:番号が無効です

どうしたの?

4

1 に答える 1

1
  1. TYPE はオラクルのキーワードです。そのような列名は使用しない方がよいでしょう。

  2. テーブル定義に TYPE 列がありません。列が存在する場合は、すべてのフィールドが読み取られた後、定数の割り当てを制御ファイルの末尾に移動します。

    STARTDTE "to_date(SUBSTR(:STARTDTE,1,10),'YYYY-MM-DD') - 27", TYPE CONSTANT 'フットボール', SCORE ,

また、データとして「FOOTBALL_TEAM_MIDDLE_AND_OLD_1234」を持つフィールドを無視しようとしている場合は、追加する必要があります

THIRD_COLUMN FILLER,

制御ファイルに追加して、そのデータを無視します。何かのようなもの..

load data           
infile 'E:\Data\Sample.csv'
badfile 'E:\Data\Sample.bad'
APPEND into table TABLE1    
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS               
(   
 DRIVER,
 STARTDTE "to_date(SUBSTR(:STARTDTE,1,10),'YYYY-MM-DD') - 27",
 THIRD_COLUMN FILLER,
 SCORE   ,
 RANKSCORE ":SCORE",
 RANK    ,
 ENDDTE "to_date(SUBSTR(:STARTDTE,1,10),'YYYY-MM-DD')",
 LOADDT     "sysdate"
 TYPE  CONSTANT 'FOOTBALL',
)

発生しているエラーを修正する必要があります。

于 2012-09-21T20:03:40.567 に答える