IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL*Loader Oracle Discussion :

[SQL LOADER] Comment rejeter tout le fichier s'il y'a une ligne KO?


Sujet :

SQL*Loader Oracle

  1. #1
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [SQL LOADER] Comment rejeter tout le fichier s'il y'a une ligne KO?
    Bonjour,

    J'utilise pour la première fois SQL LOADER, et j'ai deux questions à vous poser svp:
    - j'aimerai savoir si on peut rejeter tout le fichier en entrée s'il contient une ligne KO (qui ne passe pas les contrôles) sans passer par une table intermédiaire ?
    - comment faire pour récupérer une date (date et heure système) et la charger dans ma table cible? A noter: je veux garder exactement la même hh:mm:ss pour tous les enregistrements chargés.
    J'ai essayé de mettre SYSDATE dans le fichier CTL mais je n'ai pas exactement la même heure (différence des secondes)

    Je pense à créer une variable pour mettre la date système au lancement du chargement, et puis alimenter la table avec cette donnée, mais je ne sais pas comment le faire avec SQL LOADER

    Pourriez-vous m'aider la dessus s'il vous plaît?
    Je vous en remercie d'avance,

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    février 2012
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : février 2012
    Messages : 651
    Points : 1 859
    Points
    1 859
    Par défaut
    Bonjour,


    L'option ERRORS=x permet de spécifier le nombre d'erreurs tolérées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlldr Base/PWDBase@inst CONTROL=DAT.log LOG=LOG_LDR.log ERRORS=0
    Il existe là même option pour les enregistrements mis au rébut (su tu utilises un Discard File)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlldr Base/PWDBase@inst CONTROL=DAT.log LOG=LOG_LDR.log DISCARD=DIS.log DISCARDMAX=0
    Obtenir une heure figée pour tous les enregistrements, là je ne vois pas trop comment répondre à ta problématique...
    Une idée serait que l'appelant transmette l'heure précise de début de chargement et que tu stockes cette valeur pour chaque enregistrement

  3. #3
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton retour rapide,
    sinon j'ai testé avec le paramètre ERRORS= 0 mais il ne rejette pas touts le fichier, il s'arrête au flux KO et fait le commit quand même.
    Ce que je veux vraiment, c'est une fois on rencontre une ligne KO, on ne doit pas faire le commit d'aucune écriture.

    Pour la date, il me faut la date du chargement. du coup le SI émetteur du fichier ne pourra pas nous envoyer cette donnée.

  4. #4
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Finance

    Informations forums :
    Inscription : juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Concernant la date, j'alimente la donnée comme suit dans le fichier CTL, mais pourtant je ne récupère pas l'heure
    ENTSAS "To_date(SYSDATE, 'DD/MM/RRRR HH24:MI')"
    et je récupère 10/10/2019 00:00:00

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    décembre 2002
    Messages
    3 428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : décembre 2002
    Messages : 3 428
    Points : 7 866
    Points
    7 866
    Par défaut
    Il y a un détail important, c'est que SQL*Loader va charger les lignes par lots, en effectuant un COMMIT à chaque lot.
    A titre de piste (non testé), je suggérerais de regarder du côté des paramètres ROWS et BINDSIZE (tout en conservant ERRORS=0).
    L'idée est de donner à ces paramètres une valeur tellement élevée que toutes les lignes seraient traitées d'un coup, avec un seul COMMIT final.
    Et s'il y a une erreur quelque part, on devrait obtenir un ROLLBACK.
    A tester, et bien sûr si la volumétrie est importante, ça ne sera pas praticable.

    Mais à vrai dire, il n'est pas certain que SQL*Loader soit la meilleure technique pour charger vos données.
    Peut-être que le passage par une table externe vous donnera la souplesse nécessaire pour répondre à vos objectifs, à savoir un mode tout ou rien, et la possibilité d'insérer une date fixe.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

Discussions similaires

  1. SQL*Loader - Comment ignorer une ligne?
    Par domiq44 dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 10/04/2008, 13h23
  2. Réponses: 7
    Dernier message: 18/12/2007, 20h53
  3. comment copier tout les fichier d'un répertoire?
    Par UnSofteuxAmateur dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/10/2007, 10h30
  4. Réponses: 1
    Dernier message: 08/03/2007, 12h35
  5. Réponses: 12
    Dernier message: 23/05/2006, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo