Oracle
 sql >> Base de données >  >> RDS >> Oracle

Chargeur SQL - deuxième chaîne de boîtier non présente

Si votre dernier champ est toujours présent (bien que trailing nullcols suggère que ce n'est pas le cas) et que vous avez un certain contrôle sur le formatage, vous pouvez utiliser le CONTINUEIF directive pour traiter la deuxième ligne comme faisant partie du même enregistrement logique.

Si les comments champ est toujours présent et entouré de guillemets, vous pouvez faire :

...
truncate
continueif last != x'22'
into table ...

Qui gérerait les enregistrements de données comme :

S;Y;"Test 1"
F;N;"Test 2"
P;Y;"Test with
new line"
P;N;""

Ou si vous avez toujours un délimiteur après le champ commentaires, qu'il soit renseigné ou non :

...
truncate
continueif last != ';'
into table ...

Qui gérerait :

S;Y;Test 1;
F;N;"Test 2";
P;Y;Test with
new line;
P;N;;

Les deux manières chargeront les données comme :

S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test withnew line
P N

Mais cela perd la nouvelle ligne des données. Pour conserver cela, vous avez besoin que le délimiteur de champ de fin soit présent, et au lieu de CONTINUEIF vous pouvez modifier le séparateur d'enregistrements à l'aide du format d'enregistrement de flux :

...
infile 'C:\Users\lab.csv' "str ';\n'"
truncate
into table ...

Le "str ';\n'" définit le terminateur comme la combinaison du terminateur de champ et d'un caractère de nouvelle ligne. Votre commentaire fractionné n'a que cette combinaison sur la dernière ligne. Avec le même fichier de données que la version précédente, cela donne :

S M COMMENTS
- - ------------------------------
S Y Test 1
F N Test 2
P Y Test with
    new line

P N

4 rows selected.

Puisque vous êtes sous Windows, vous devrez peut-être inclure \r dans le format également, par ex. "str ';\r\n'" , mais je ne suis pas en mesure de vérifier cela.