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

Sybase Discussion :

[BCP]Proc de Gestion d'erreur après import de données.


Sujet :

Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Par défaut [BCP]Proc de Gestion d'erreur après import de données.
    Bonjour,

    Je travaille actuellement dans un environnement Sybase 12.0/Unix. Un script importe quotidiennement des données via un bcp.
    Je rencontre un pb avec des fichiers d'import qui contiennent des données complètement farfelues.

    Précisement :
    Colonne source : DATE_VL -> CHAR (10)
    Colonne destination (en base) : DATE_VALO -> SMALLDATETIME

    Exemple de données erronnées qui font planter les proc liées :
    DATE_VL : "2007/17/07 5:35 PM"

    Je devrais avoir à la place :
    DATE_VALO : "17/07/2007 17:35"

    La conversion renvoie une erreur et oblige la procédure à sortir en erreur.

    Je recherche un moyen d'annuler la connversion si celle-ci revient en erreur.

    Je pensais faire quelque chose du genre :
    --------------------------------------------------------------------
    DECLARE @DATE_VL CHAR (10)
    DECLARE @DATE_VALO SMALLDATETIME
    DECLARE @MESSAGE VARCHAR (128)

    SELECT @DATE_VALO = (CONVERT (@DATE_VL,SMALLDATETIME))

    SELECT @@ERROR

    IF @@ERROR <> 0
    BEGIN
    SELECT@MESSAGE = "DONNEE INCORRECTE"
    ROLLBACK TRAN
    RETURN
    END
    ELSE
    BEGIN
    SELECT @MESSAGE =" DONNEE OK"
    END


    SELECT @MESSAGE
    COMMIT TRAN
    ------------------------------------------------------------------------

    Le pb est que l'erreur dans la conversion empêche la suite de l'exécution de la requête. De ce fait, la condition IF ne fonctionne que quand il n'y a pas d'erreur.

    Pouvez-vous m'aider à trouver une parade ?
    Par avance, je vous remercie.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Je ne suis pas sûre de bien comprendre la séquence.

    En principe, la chaine "2007/17/07 5:35 PM" est comprise par Sybase comme une date. Donc un bcp in de cette chaine vers un champ de type DATETIME doit fonctionner correctement.

    De même, un CONVERT(datetime, "2007/17/07 5:35 PM") ne devrait pas poser de problème non plus.

    Est-ce que tu peux préciser le problème ?

    Merci,

    Michael

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Par défaut
    Je dois avouer que c'est suprenant mais Sybase n'arrive effectivement pas à convertir la donnée suivante en datetime :

    DECLARE @DATE_VL VARCHAR (128)
    DECLARE @DATE_VALO DATETIME

    SELECT @DATE_VL = "2007/17/07 5:35 PM"
    SELECT @DATE_VALO = CONVERT (DATETIME,@DATE_VL)

    J'obtiens l'erreur suivante :
    "Arithmetic overflow during explicit conversion of CHAR value '2007/17/07' to a DATETIME field"

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Par défaut
    de manière générale, je cherche à intercepter une erreur de conversion et à effectuer une action dans ce cas, par exemple insérer la ligne en erreur dans une table temporaire et afficher un message d'erreur personnalisé.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Pff... j'avais mal lu. Evidemment, 2007/17/07 va poser problème (il n'y a en général pas de mois 17 )

    Il est possible que l'on puisse gérer cela via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set arithabort off
    (sous ASE 15.0.1 il y a bien une fonction isdate(), mais cela ne va pas beaucoup t'aider...)


    Michael

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 6
    Par défaut
    Je dois préciser la version de sybase utilisée : 12.5.4

    j'imagine que c'est pour cela que la fonction indiquée ci-dessus ne fonctionne pas ... Sniff !

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    si si elle existe mais pourquoi ne pas utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1> set dateformat ydm
    2> go
    1> declare @toto datetime
    2> select @toto="2007/17/07 5:35PM"
    3> go
    (1 row affected)

Discussions similaires

  1. [XL-2003] Erreur lors de l'import de données ASCII
    Par Vincent32 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/11/2012, 17h34
  2. [AC-2000] gestion des erreurs lors de l'importation d'un CSV dans une table formaté
    Par zandeparis dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/11/2009, 23h45
  3. Gestion des erreurs de conversion de type de données
    Par FMJ dans le forum Développement
    Réponses: 11
    Dernier message: 09/07/2009, 23h27
  4. erreur lors de l'import de données
    Par benoitXV dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 06/11/2008, 16h13
  5. Réponses: 6
    Dernier message: 09/06/2006, 12h17

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