Vous pouvez apply an SQL operator, tel que NVL(:PAESE, 'XXX')
. Notez les deux points avant la référence au nom du champ. In situ:
LOAD DATA
infile 'gian.csv'
REPLACE
INTO TABLE tar
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
(
IDTAR,
DATABACKUP DATE "YYYY-MM-DD",
PAESE "NVL(:PAESE, 'XXX')",
R_ELEM NULLIF (R_ELEM=BLANKS)
)
Avec une table factice:
créer goudron de table ( numéro de idtar, Date de DataBackup, Paese varchar2 (10) non nulle, r_elem varchar2 (10) );
et CSV, où les 3e et 4e lignes ont des espaces de fin de la clause nullif()
:
1,2017-08-01,A,B
2,2017-08-02,C,
3,2017-08-03,,
4,2017-08-04,"",
en cours d'exécution puis avec ce fichier de contrôle avait:
SQL*Loader: Release 11.2.0.4.0 - Production on Fri Aug 4 19:39:23 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 4
et le journal dit:
...
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
IDTAR FIRST * , O(") CHARACTER
DATABACKUP NEXT * , O(") DATE YYYY-MM-DD
PAESE NEXT * , O(") CHARACTER
SQL string for column : "NVL(:PAESE, 'XXX')"
R_ELEM NEXT * , O(") CHARACTER
NULL if R_ELEM = BLANKS
Table TAR:
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.
...
L'interrogation du tableau montre que les quatre lignes ont été chargées:
set null "<null>"
select * from tar;
IDTAR DATABACKU PAESE R_ELEM
---------- --------- ---------- ----------
1 01-AUG-17 A B
2 02-AUG-17 C <null>
3 03-AUG-17 XXX <null>
4 04-AUG-17 XXX <null>
Remplacez évidemment 'XXX'
par la chaîne par défaut que vous souhaitez utiliser. Vous avez dit 'une chaîne vide', vous pouvez donc utiliser "NVL(:PAESE, ' ')"
pour insérer un seul caractère d'espace par exemple. Vous ne pouvez pas utiliser une chaîne vide, car c'est la même chose que null en ce qui concerne Oracle.
Que voulez-vous dire par une chaîne vide? Une chaîne vide est la même que null dans Oracle, alors voulez-vous dire un ou plusieurs caractères d'espaces? Y compris votre tableau DDL et exemples de données de votre fichier CSV serait utile aussi. –
Une chaîne vide est la même que null dans Oracle .Ahh !!! C'est le point !!! –
["Oracle Database traite actuellement une valeur de caractère nulle avec une longueur égale à zéro, mais cela ne sera peut-être pas vrai dans les versions ultérieures et Oracle recommande de ne pas traiter les chaînes vides comme des valeurs nulles."] (Https : //docs.oracle.com/database/121/SQLRF/sql_elements005.htm#SQLRF30037) –