2017-09-04 1 views
0

J'essaie de charger des données à l'aide de SQL Loader mais en obtenant une erreur en-dessous.Erreur SQL Loader - Ligne non chargée en raison d'erreurs de données

Table à charger -

CREATE TABLE TEST_PIPE_SEP (FILE_NAME VARCHAR2(3000), KEY_COL VARCHAR2(4000), DESCR VARCHAR2(100), RUN_DATE DATE); 

Je crée le fichier CTL dynamique en utilisant la commande Shell et DÉS afin que je puisse obtenir le fichier de traitement en cours et de le transmettre comme valeur par défaut de la colonne FILE_NAME.

#!/bin/ksh 

echo "starting script" 
#cd data 

for i in data/Key_Mismatch_Output_UAT*.csv 
do 

    #echo "$i" 

    filename=`basename "${i}"` 
    echo "$filename" 

    #sed '1d' "$i" >> test.csv 
    sed -e "s/#file_name#/file_name \"${filename}\",/g" test.ctl > new_test_3.ctl 

sqlldr ERRORS=100000 userid=$USER_CRED control=new_test_3.ctl data=data/$filename silent=all log=data/$filename".log" bad=data/$filename.bad skip=1 

wait 
done 
echo "ending script" 

Le format de test.ctl est comme ci-dessous que je suis l'édition à temps courir avec sed pour passer le nom du fichier de traitement actuel -

LOAD DATA   
CHARACTERSET WE8ISO8859P1   
APPEND   
INTO TABLE TEST_PIPE_SEP   
FIELDS TERMINATED BY ','   
(  
#file_name#  
key_col "trim(:key_col)", 
descr "trim(:descr)", 
run_date "SYSDATE" 
) 

Le nouveau fichier qui se crée après la ETD Commend est comme ci-dessous -

LOAD DATA 
CHARACTERSET WE8ISO8859P1 
APPEND 
INTO TABLE TEST_PIPE_SEP 
FIELDS TERMINATED BY ',' 
( 
file_name "Key_Mismatch_Output_UAT.csv.20170804070448.1_LIVE.csv.20170804070448.2_20170804070448.csv", 
key_col "trim(:key_col)", 
descr "trim(:descr)", 
run_date "SYSDATE" 
) 

Le fichier CSV et son contient -

Key Columns,Description 

"C"|"G000053929"|"ABCD"|"G000053929"|""|""|"TTA"|""|""|""|""|""|"DRR"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"",Not Present in file1 
"C"|"G000053621"|"HGHQ"|"G000053621"|""|""|"CBI"|""|""|""|""|""|"DRR"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"",Not Present in file2 
"C"|"G000053929"|"HGHQ"|"G000053929"|""|""|"TTA"|""|""|""|""|""|"DRR"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"",Not Present in file2 

et je reçois ci-dessous erreur et pas en mesure de trouver la cause de l'itinéraire essayé de changer le fichier CTL autant que possible, mais ne sont pas capables de charger des données

Table TEST_PIPE_SEP, loaded from every logical record. 
Insert option in effect for this table: APPEND 
  
    Column Name     Position Len Term Encl Datatype   
------------------------------ ---------- ----- ---- ---- --------------------- 
FILE_NAME       FIRST  * ,  CHARACTER    
    SQL string for column : "TRIM('Key_20170804070448.csv')" 
KEY_COL        NEXT  * ,  CHARACTER    
DESCR        NEXT  * ,  CHARACTER    
RUN_DATE        NEXT  * ,  CHARACTER    
    SQL string for column : "SYSDATE" 
  

Table TEST_PIPE_SEP: 

    0 Rows successfully loaded. 
    1 Row not loaded due to data errors. 
    0 Rows not loaded because all WHEN clauses were failed. 
    0 Rows not loaded because all fields were null. 

S'il vous plaît me demander si plus d'information est nécessaire.

J'utilise

Oracle Database 11g Enterprise Edition de presse 11.2.0.4.0 - 64bit production

Répondre

1

Pour autant que je sais pour charger une valeur constante avec sqlldr, vous devez utiliser le mot CONSTANT. Donc, dans votre cas, vous devez remplacer

... 
FIELDS TERMINATED BY ',' 
(file_name "Key_Mismatch_Output_UAT.csv.20170804070448.1_LIVE.csv.20170804070448.2_20170804070448.csv", 
... 

avec

... 
FIELDS TERMINATED BY ',' 
(file_name CONSTANT "Key_Mismatch_Output_UAT.csv.20170804070448.1_LIVE.csv.20170804070448.2_20170804070448.csv", 
... 

Pls moi cela fonctionne pour vous (en attendant, je tente de reproduire votre table et votre script, faire plus test si nécessaire)

Addendum

J'ai fait un test à l'aide de vos données. Je confirme que vous devez utiliser le mot-clé CONSTANT comme suggéré ci-dessus.

De plus, je pense que vous devriez ajouter l'option TRAILING NULLCOLS lorsque vous voulez charger run_date avec SYSDATE. Donc, vous devriez changer

... 
INTO TABLE TEST_PIPE_SEP 
FIELDS TERMINATED BY ',' 
( 
... 

avec

... 
INTO TABLE TEST_PIPE_SEP 
FIELDS TERMINATED BY ',' 
TRAILING NULLCOLS 
( 
... 

CTL utilisé pour faire mes tests:

LOAD DATA 
CHARACTERSET WE8ISO8859P1 
APPEND 
INTO TABLE TEST_PIPE_SEP 
FIELDS TERMINATED BY ',' 
TRAILING NULLCOLS 
( 
file_name CONSTANT "Key_Mismatch_Output_UAT.csv.20170804070448.1_LIVE.csv.20170804070448.2_20170804070448.csv", 
key_col "trim(:key_col)", 
descr "trim(:descr)", 
run_date "SYSDATE" 
) 

fichier journal sqlldr: (I chargé 4 lignes parce que j'ajouté un autre échantillons de lignes dans votre fichier (simplement A, B).

SQL*Loader: Release 11.2.0.2.0 - Production on Mon Sep 4 15:01:12 2017 
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 
Control File: TEST2.CTL 
Character Set WE8ISO8859P1 specified for all input. 
Data File:  test2.csv 
    Bad File:  test2.bad 
    Discard File: none specified 
(Allow all discards) 
Number to load: ALL 
Number to skip: 1 
Errors allowed: 100000 
Bind array:  64 rows, maximum of 256000 bytes 
Continuation: none specified 
Path used:  Conventional 
Table TEST_PIPE_SEP, loaded from every logical record. 
Insert option in effect for this table: APPEND 
TRAILING NULLCOLS option in effect 
    Column Name     Position Len Term Encl Datatype 
------------------------------ ---------- ----- ---- ---- --------------------- 
FILE_NAME             CONSTANT 
    Value is 'Key_Mismatch_Output_UAT.csv.20170804070448.1_LIVE.csv.20170804070448.2_20170804070448.csv' 
KEY_COL        FIRST  * ,  CHARACTER    
    SQL string for column : "trim(:key_col)" 
DESCR        NEXT  * ,  CHARACTER    
    SQL string for column : "trim(:descr)" 
RUN_DATE        NEXT  * ,  CHARACTER    
    SQL string for column : "SYSDATE" 

Table TEST_PIPE_SEP: 
    4 Rows successfully loaded. 
    0 Rows not loaded due to data errors. 
    0 Rows not loaded because all WHEN clauses were failed. 
    0 Rows not loaded because all fields were null. 

Space allocated for bind array:     55296 bytes(64 rows) 
Read buffer bytes: 1048576 

Total logical records skipped:   1 
Total logical records read:    4 
Total logical records rejected:   0 
Total logical records discarded:  0 

Run began on Mon Sep 04 15:01:12 2017 
Run ended on Mon Sep 04 15:01:12 2017 

Elapsed time was:  00:00:00.09 
CPU time was:   00:00:00.00 

données Exemple:

Key Columns,Description 
A,B 
"C"|"G000053929"|"ABCD"|"G000053929"|""|""|"TTA"|""|""|""|""|""|"DRR"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"",Not Present in file1 
"C"|"G000053621"|"HGHQ"|"G000053621"|""|""|"CBI"|""|""|""|""|""|"DRR"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"",Not Present in file2 
"C"|"G000053929"|"HGHQ"|"G000053929"|""|""|"TTA"|""|""|""|""|""|"DRR"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"",Not Present in file2 
+0

Merci pour etsa de réponse. J'ai essayé d'utiliser le mot-clé CONSTANT mais cela me donne la même erreur. Avez-vous exécuté le scénario avec succès si oui pourriez-vous donner l'exemple de fichier CTL que vous utilisez et oui je modifie la structure CTL pour ajouter TRAILING NULLCOLS. – mradul

+0

@mradul Oui j'ai exécuté avec succès. J'ai ajouté CTL à ma réponse – etsa

+0

@mradul a ajouté le ctl de journal et les données d'échantillon (votre plus une autre rangée) – etsa