Bonjour,
Je rencontre un problème avec un import SqlLoader, et je ne comprends vraiment pas ce que je fais de mal...
J'essaye de faire un LOAD REPLACE et j'ai deux clauses INTO sur la même table, chacune accompagnée d'un WHEN différent vu que les OR ne sont pas autorisés
Aucun problème à l'execution, mais au final seule ma première section INTO est correctement insérée. Si j'inverse mes deux clauses INTO, c'est toujours la première clause exécutée, la seconde semblant être ignorée...
Dans mon jeu de test, j'obtiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
51
52
53
54
55
56
57
58
59
60
61 LOAD DATA REPLACE INTO TABLE MTM_EXTRACT WHEN (BOOKING='A') AND (VALO='ST') FIELDS TERMINATED BY '|' ( AS_OF_DATE "TO_DATE( LTRIM( RTRIM(:AS_OF_DATE) ), 'YYYY/MM/DD')", filler15 FILLER, filler16 FILLER, filler17 FILLER, filler18 FILLER, filler19 FILLER, filler20 FILLER, MTM_CURRENCY NULLIF MTM_CURRENCY=BLANKS, MTM_AMOUNT "LTRIM( RTRIM(:MTM_AMOUNT) ) ", filler21 FILLER, filler22 FILLER, filler23 FILLER, filler24 FILLER, filler25 FILLER, filler26 FILLER, filler27 FILLER, filler28 FILLER, BOOKING FILLER, VALO FILLER, SOURCE_SYSTEM_ID NULLIF SOURCE_SYSTEM_ID=BLANKS, DEAL_ID_FO "SUBSTR( LTRIM( RTRIM(:DEAL_ID_FO) ), 1, 20)", MTM_FORMAT NULLIF MTM_FORMAT=BLANKS, MTM_SOURCE "UPPER( LTRIM( RTRIM(:MTM_SOURCE) ) )" ) INTO TABLE MTM_EXTRACT WHEN (BOOKING=BLANKS) AND (VALO=BLANKS) FIELDS TERMINATED BY '|' trailing nullcols ( AS_OF_DATE "TO_DATE( LTRIM( RTRIM(:AS_OF_DATE) ), 'YYYY/MM/DD')", filler1 FILLER, filler2 FILLER, filler3 FILLER, filler4 FILLER, filler5 FILLER, filler6 FILLER, MTM_CURRENCY NULLIF MTM_CURRENCY=BLANKS, MTM_AMOUNT "LTRIM( RTRIM(:MTM_AMOUNT) ) ", filler7 FILLER, filler8 FILLER, filler9 FILLER, filler10 FILLER, filler11 FILLER, filler12 FILLER, filler13 FILLER, filler14 FILLER, BOOKING FILLER, VALO FILLER, SOURCE_SYSTEM_ID NULLIF SOURCE_SYSTEM_ID=BLANKS, DEAL_ID_FO "SUBSTR( LTRIM( RTRIM(:DEAL_ID_FO) ), 1, 20)", MTM_FORMAT NULLIF MTM_FORMAT=BLANKS, MTM_SOURCE "UPPER( LTRIM( RTRIM(:MTM_SOURCE) ) )" )
Alors que le second when doit matcher 1 enregistrement (il match bien si j'inverse les when, d'ailleurs)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Table MTM_EXTRACT: 2 Rows successfully loaded. 0 Rows not loaded due to data errors. 5 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null. Table MTM_EXTRACT: 0 Rows successfully loaded. 0 Rows not loaded due to data errors. 7 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null.
Chose intrigante, si j'enlève le second When, alors j'ai le résultat suivant sur le second INTO:
Il semblerait que le second INTO a 7 ligne d'enregistrements vides
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Table MTM_EXTRACT: 0 Rows successfully loaded. 0 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed. 7 Rows not loaded because all fields were null.
Est-ce un effet de bord des filler?
Si vous avez une idée, je suis preneur!
Partager