2017-07-05 2 views
1

J'ai essayé de charger certaines données à partir d'un fichier CSV sur la base de certaines conditions et je suis limité par l'utilisation du contrôle "OU" dans la clause (Oracle ctl) les données des charges pour les 11 premières conditions, mais ne charge aucun données après le premier 11 étatDonnées Oracle ne se charge pas après POSITION (10)

Ci-dessous l'exemple de code

 create table t1 (
    c1 varchar(10), 
    c2 varchar(10), 
    c3 varchar(10) 
    ) 

---------- ------ dataloader -----

 options(errors=20000) 
    LOAD DATA 
    INFILE 'D:\Scripts\abc.csv'    
    BADFILE 'D:\Scripts\abc.BAD' 
    DISCARDFILE 'D:\Scripts\abc.DIS' 
    DISCARDMAX 20000 
    insert 
    INTO TABLE t1 

    when c1='James' 

    FIELDS TERMINATED BY "," optionally enclosed by '"' 

    Trailing NULLCOLS 
    (    
    c1, 

    c2, 

    c3 
    ) 

    INTO TABLE t1 

    when c1='John' 

    FIELDS TERMINATED BY "," optionally enclosed by '"' 

    Trailing NULLCOLS 
    (    
    c1 POSITION(1), 

    c2, 

    c3 
    ) 

    INTO TABLE t1 

    when c1='Sam' 

    FIELDS TERMINATED BY "," optionally enclosed by '"' 

    Trailing NULLCOLS 
    (    
    c1 POSITION(2), 

    c2, 

    c3 
    ) 
    . 
    . 
    .   
    INTO TABLE t1 

    when c1='Mark' 

    FIELDS TERMINATED BY "," optionally enclosed by '"' 
    Trailing NULLCOLS 
    (    
    c1 POSITION(12), 

    c2, 

    c3 

    ) 

-------------- ----- dataloader exécution

 sqlldr scott/tiger direct=true control='filepath' 

Répondre

0

pour l'exécution de chaque condition que nous devons placer POSITION (1) jusqu'à balise POSITION (9) pour chaque condition. sinon le fichier ctl ne lit pas le marquage et ignore la condition