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 Oracle Discussion :

Retrouver ligne en erreur


Sujet :

SQL Oracle

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut Retrouver ligne en erreur
    Bonjour,

    j'ai une fonction SQL qui me remonte une erreur due à un souci de données.
    cette fonction balaye beaucoup de lignes de données.

    je cherche un moyen d'identifier la ligne de données qui me pose souci.

    comment puis-je faire ?

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Très vague comme information.
    Utilisez un gestionnaire d'exception dans votre fonction pour stocker l'information permettant d'identifier votre enregistrement.
    Ou cherchez-vous même les lignes qui peuvent provoquer l'erreur en SQL en appliquant les transformations nécessaires à vos données.

  3. #3
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Vous pouvez peut être décomposer le traitement pour qu'il s'exécute ligne par ligne si le problème vient d'un traitement en masse...
    Il y a aussi la clause log errors qui peut vous venir en aide...
    Tout dépend de votre problème et de votre implémentation actuels....

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    bonjour,

    en fait je cherche une solution de "debug" que je pourrais utiliser de façon récurrente quand je rencontre ce souci.

    j'ai dans ce cas une fonction Oracle SQL qui me permet de renvoyer un état en fonction d'éléments métiers dans mes tables.

    La fonction fonctionne ...

    Je l'appelle comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Ma_Fonction(....) From Dual
    Parce qu'un de mes tests me renvoie plusieurs lignes ma fonction tombe en erreur.....

    Je cherche à identifier la ligne de données qui génère cette erreur car d'un point de vue métier ce n'est pas normal ...

    Je me demandais s'il existait des traitements d'exception d'erreur en SQL comme en java ou autre .... ou des logs.

    Merci à vous

  5. #5
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Bonjour,


    Citation Envoyé par shaun_the_sheep Voir le message
    Je l'appelle comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select Ma_Fonction(....) From Dual
    Parce qu'un de mes tests me renvoit plusieurs lignes ma fonction tombe en erreur.....
    On peut voir votre code?


    Je me demandais si il existait des traitements d'exception d'erreur en SQL comme en java ou autre .... ou des logs.
    En PL/SQL on peut gérer les exceptions et voici le lien vers la documentation

    http://docs.oracle.com/cd/E11882_01/...s.htm#CHDFGBJI



    Cordialement,
    Dariyoosh
    Cordialement,
    Dariyoosh

  6. #6
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Je reporte l'erreur renvoyé lors de l’exécution de ma requête.

    ORA-01422: l'extraction exacte ramène plus que le nombre de lignes demandé
    ORA-06512: à ".....", ligne 32
    01422. 00000 - "exact fetch returns more than requested number of rows"
    *Cause: The number specified in exact fetch is less than the rows returned.
    *Action: Rewrite the query or change number of rows requested
    Puis je exploiter ce type d'erreur dans une exception et obtenir l'enregistrement qui me pose problème ?

    Merci de votre aide.

  7. #7
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    je commence à utiliser les exceptions .....

    j'ai ajouté cela :

    Au début de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          -- Ouverture du tampon --
          DBMS_OUTPUT.ENABLE( 1000000 ) ;
    Et avant le return de ma fonction ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    .....
    EXCEPTION
      WHEN TOO_MANY_ROWS THEN
        DBMS_OUTPUT.PUT( 'UID = ' || PART_UID);
        RETURN 2;
    Ma fonction me renvoit bien une ligne avec la valeur 2 au lieu de 1 ou 0 , donc mon exception semble fonctionner.

    Je suis sous SQL Developper , j'ai activé la sortie SGBD ... mais je ne vois pas le résultat de :
    DBMS_OUTPUT.PUT( 'UID = ' || PART_UID);

    quelqu'un peut il m'aider ?

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Utilisez DBMS_OUTPUT.PUT_LINE au lieu de DBMS_OUTPUT.PUT.

  9. #9
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Merci ....

    En faite c'est SQL Developper qui n'affiche pas bien les résultats.
    comme s'il n'y avait pas de rafraîchissement d'affichage.

    Si je recomplile ma fonction par exemple , tout s'affiche ....

    J'ai la version 3.1.07

    Y a un truc ?

  10. #10
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    As-tu fait un "Set severoutput on" pour afficher le résultat de ton display Dbms_output.put_line ?

  11. #11
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Oui mais via l'interface de sqldevelopper ....
    je vais essayer par la commande.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C# 2.0] Retrouver ligne dans checkboxlist
    Par lenoil dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/11/2007, 11h40
  2. Affichage numéro de ligne d'erreur
    Par kuja2053 dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2007, 23h56
  3. explication d'une ligne d'erreur DEV
    Par katia_heraklion dans le forum C
    Réponses: 2
    Dernier message: 26/03/2007, 19h26
  4. Pb de select : retrouver lignes identiques
    Par lamf dans le forum Requêtes
    Réponses: 11
    Dernier message: 07/01/2006, 20h53
  5. [xml] Récupérer le numéro de la ligne d'erreur d'un fichier
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/03/2004, 19h09

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