Oracle sqlldr TRAILING NULLCOLS requis, mais pourquoi?
J'ai une abscons sqlldr problème qui me tracasse. Mon fichier de contrôle ressemble à quelque chose comme ceci:
load data
infile 'txgen.dat'
into table TRANSACTION_NEW
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS
( A,
B,
C,
D,
ID "ID_SEQ.NEXTVAL"
)
Des données est quelque chose comme ceci:
a,b,c,
a,b,,d
a,b,,
a,b,c,d
Si je ne mets pas de FUITE NULLCOLS, j'obtiens la "colonne qui n'a pas trouvé avant la fin de l'enregistrement logique" d'erreur. Mais bien que certaines colonnes sont nulles, les virgules sont tous là, donc je ne vois pas une raison pour sqlldr interpréter le fichier d'entrée, et de ne pas arriver à la fin où il génère l'ID de la base de données de séquence.
Cette syntaxe a travaillé avant sans nul colonnes - pourquoi une colonne null cause sqlldr de ne pas atteindre le générés colonne?
J'ai eu à travailler, je veux juste comprendre POURQUOI!?!
source d'informationauteur orbfish
Vous devez vous connecter pour publier un commentaire.
Vous avez défini 5 champs de votre fichier de contrôle. Vos champs sont terminés par une virgule, si vous avez besoin de 5 virgules dans chaque enregistrement pour les 5 champs à moins de FUITE NULLCOLS est spécifié, même si vous chargez le champ ID avec une valeur de séquence via la Chaîne SQL.
RE: Commentaire de l'OP
Ce n'est pas mon expérience avec un bref test. À la suite du fichier de contrôle:
Produit la sortie suivante:
Noter que la seule ligne qui est chargé correctement, il y avait 5 des virgules. Même la 3ème ligne, avec toutes les valeurs de données, à l'exception de l'ID, les données ne prend pas en charge. À moins que je me manque quelque chose...
Je suis en utilisant 10gR2.
Dernière colonne de votre fichier d'entrée doit disposer de certaines données (soit l'espace ou de char, mais pas nulle). Je suppose que, le 1er enregistrement contient la valeur null après la dernière ',' qui sqlldr ne reconnaît pas, sauf si expressément demandé de reconnaître les valeurs null à l'aide de FUITE NULLCOLS option.
Alternativement, si vous ne voulez pas utiliser de FUITE NULLCOLS, vous aurez à prendre soin de ces valeurs Null avant de vous transmettre le fichier à sqlldr.
Espérons que cela aide
Le problème ici est que vous avez l'ID défini comme un champ dans votre fichier de données lors de ce que vous voulez, c'est juste l'utilisation d'une expression sans de données à partir du fichier de données. Vous pouvez résoudre ce problème en définissant ID comme une expression (ou une séquence dans ce cas)
ou
Voir: http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1008234 pour toutes les options
Essayer de donner 5 ',' pour chaque ligne, similaire à la ligne numéro 4.
J'ai eu le même problème lorsque j'ai eu beaucoup de supplémentaire enregistrements dans un fichier csv avec des valeurs vides. Si j'ouvre le fichier csv dans le bloc-notes puis des lignes vides ressemble à ceci:
,,,,
,,,,
,,,,
,,,,
Vous ne pouvez pas voir ces si l'ouvrir dans Excel. Veuillez vérifier dans le bloc-notes et de supprimer ces enregistrements