sqlloader et séquence pour importer un fichier csv
Bonjour,
Je dois importer un fichier csv dans une table.
La table est la suivante
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
CREATE TABLE CCM_IMPORT_CER
(
IC4_ID NUMBER,
IC1_CODE NUMBER(15),
CTC_CODE NUMBER(10),
CTC_RAIS VARCHAR2(100 CHAR),
CDR_CP VARCHAR2(8 CHAR),
CDR_VILLE VARCHAR2(40 CHAR),
CER_LIB VARCHAR2(30 CHAR),
CER_CODE NUMBER(2),
ACC_DATEOPT DATE,
IC1_CER_TOKILL NUMBER(1),
IC1_CER_KILLED NUMBER(1),
INTEGRATED_AT VARCHAR2(15 CHAR),
CREATED_AT DATE,
CREATED_BY NUMBER(6)
) |
la séquence est créée
Code:
1 2 3 4 5 6 7 8 9 10 11
|
--
-- CCM_IMPORT_CER_SEQ (Sequence)
--
CREATE SEQUENCE CCM_IMPORT_CER_SEQ
START WITH 1
MAXVALUE 9999999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
ORDER; |
Le fichier de contrôle est le suivant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
LOAD DATA
INFILE "${DIRCSV}${uti_code}_CCM_IMPORT_CER_${integrated_at}.csv"
APPEND INTO TABLE CCM_IMPORT_CER
FIELDS terminated by ";" Optionally enclosed by '"' TRAILING NULLCOLS
(
IC4_ID "ccm_import_cer_seq.nextval",
IC1_CODE ,
CTC_RAIS ,
CDR_CP ,
CDR_VILLE ,
CER_LIB ,
CER_CODE ,
ACC_DATEOPT ,
IC1_CER_TOKILL ,
IC1_CER_KILLED
) |
Le fichier csv à importer est le suivant :
Code:
1 2 3 4 5 6 7
|
1;Raison sociale 1;85600;Montaigu;Attestation de capacité;74;;0;0
3;Raison sociale 3;85602;Montaigu;Attestation de capacité;74;;0;0
3;Raison sociale 3;85602;Montaigu;Dolce vita;61;;0;0
4;Raison sociale 4;85603;Montaigu;Eco artisan;72;;0;0
4;Raison sociale 4;85603;Montaigu;Eco artisan;72;;0;0
5;Raison sociale 5;85604;Montaigu;Suivi Guillot;7;;0;0 |
L'import me donne ça en .log
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
Table CCM_IMPORT_CER, 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
------------------------------ ---------- ----- ---- ---- ---------------------
IC4_ID FIRST * ; O(") CHARACTER
SQL string for column : "ccm_import_cer_seq.nextval"
IC1_CODE NEXT * ; O(") CHARACTER
CTC_RAIS NEXT * ; O(") CHARACTER
CDR_CP NEXT * ; O(") CHARACTER
CDR_VILLE NEXT * ; O(") CHARACTER
CER_LIB NEXT * ; O(") CHARACTER
CER_CODE NEXT * ; O(") CHARACTER
ACC_DATEOPT NEXT * ; O(") CHARACTER
IC1_CER_TOKILL NEXT * ; O(") CHARACTER
IC1_CER_KILLED NEXT * ; O(") CHARACTER
Record 1: Rejected - Error on table CCM_IMPORT_CER, column IC1_CODE.
ORA-01722: invalid number
Record 2: Rejected - Error on table CCM_IMPORT_CER, column IC1_CODE.
ORA-01722: invalid number
Record 3: Rejected - Error on table CCM_IMPORT_CER, column IC1_CODE.
ORA-01722: invalid number
Record 4: Rejected - Error on table CCM_IMPORT_CER, column IC1_CODE.
ORA-01722: invalid number
Record 5: Rejected - Error on table CCM_IMPORT_CER, column IC1_CODE.
ORA-01722: invalid number
Record 6: Rejected - Error on table CCM_IMPORT_CER, column IC1_CODE.
ORA-01722: invalid number
Table CCM_IMPORT_CER:
0 Rows successfully loaded.
6 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: 165120 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 3
Total logical records read: 6
Total logical records rejected: 6
Total logical records discarded: 0 |
- Si je met en dernier la lecture de la colonne IC4_ID (pour la séquence), alors il intègre la 1ère ligne et les autres sont en erreur.
- Si je met en dernier la colonne IC4_ID et que j'ajoute des ; à la fin de chaque ligne du csv alors il arrive à m'intégrer les lignes, mais je ne vois pas pourquoi il me demande cela étant donné que j'utilise l'option TRAILING NULLCOLS ?
- Si je met IC4_ID EXPRESSION "ccm_import_cer_seq.nextval", ça ne fonctionne pas non plus.
Qu'est ce que j'ai bien pu zapper pour intégrer correctement ce fichier csv ?
Merci pour votre aide.