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...

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) ) )"
)
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
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.
Alors que le second when doit matcher 1 enregistrement (il match bien si j'inverse les when, d'ailleurs)

Chose intrigante, si j'enlève le second When, alors j'ai le résultat suivant sur le second INTO:
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.
Il semblerait que le second INTO a 7 ligne d'enregistrements vides
Est-ce un effet de bord des filler?
Si vous avez une idée, je suis preneur!