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

PL/SQL Oracle Discussion :

Aucune donnée trouvée


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiante
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Aucune donnée trouvée
    Bonjour,

    Je dispose d'une table mois avec id,numMois,nomMois.Maintenant,je voudrais récupérer l'id d'un mois si nomMois est égal au mois du système mais je bute sur l'erreur : aucune donnée trouvée et ce depuis 3 jours.Je vous mets la requête que je pense être à l'origine de cette erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id INTO idMois_v FROM Mois WHERE Mois.nomMois IN ( SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL );
    J'ai aussi essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TO_CHAR(SYSDATE,'MONTH') into mois_v FROM DUAL;
    Ensuite je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id INTO idMois_v FROM Mois WHERE Mois.nomMois = 'mois_v' from Mois;
    SELECT id INTO idMois_v FROM Mois WHERE Mois.nomMois like 'mois_v' from Mois;
    Si quelqu'un pourrait m'aider ce serait génial je dois rendre le projet avant vendredi.Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    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 : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Est-ce que les mois contenue dans ta table sont dans la même langue que le NLS_LANG d'oracle (Français / Anglais)

    Les noms de mois sont stockés dans quel type de champs (CHAR, VARCHAR, VARCHAR2, DATE ..)
    Problème de TRIM ?

    Que donne les requêtes suivantes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DESC Mois;
     
    SELECT '>'||Nom_mois||'<'
    FROM Mois;
     
    SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL;

  3. #3
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Salut,

    Comme le message d'erreur l'indique, le mois donné par le système n'existe pas dans ta table Mois

    Essaye de regarder ce que te renvois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL;
    Ensuite test cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT mois_v from Mois WHERE mois_v = TO_CHAR(SYSDATE,'MONTH')
    Si elle retourne rien, regarde dans ta table mois_v en faisant un SELECT * pour voir quel mois est censé correspondre...
    Il y a peut être la casse qui diffère entre les deux, un espace ou un accent (ce qui m'étonnerais en juillet)

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiante
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Oracle/plsql:aucune donnée trouvée
    Bonjour,j'ai fait les requêtes que vous m'avez demandé et voici les résultats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SQL> desc Mois;
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ---------------
     
     ID                                        NOT NULL NUMBER(10)
     NOMMOIS                                   NOT NULL VARCHAR2(20)
     NUMMOIS                                            NUMBER(38)
     
    SQL> select '>'||NomMois||'<' from Mois;
     
    '>'||NOMMOIS||'<'
    ----------------------
    >JUILLET<
    >Janvier<
    >Fevrier<
    >Mars<
     
    SQL> select to_char(sysdate,'MONTH') FROM DUAL;
     
    TO_CHAR(S
    ---------
    JUILLET

  5. #5
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    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 : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    A première vue, pas de soucis d'espace dans les noms de mois stockés par contre la fonction Oracle doit te ramener le nom du mois avec des espaces d'où ton problème.
    Pour le vérifier, exécute ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT '>'||TO_CHAR(SYSDATE,'MONTH')||'<'
    FROM dual
    Il y a aussi un gros risque au niveau de la casse...

    Peux-tu essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM Mois 
    WHERE UPPER(nomMois) = UPPER(TRIM(TO_CHAR(SYSDATE,'MONTH')));
    Dans la table Mois on peut voir un champs NUMMOIS. Correspond t-il au n° de mois ? (1 pour janvier, 2 pour février...).
    Si oui alors ceci sera plus efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM Mois 
    WHERE IdMois = TO_CHAR(SYSDATE,'MM');

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiante
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Oracle/plsql:aucune donnée trouvée
    Resultats des requêtes précédentes:
    SQL> select '>'||to_char(sysdate,'month')||'<' from dual;

    '>'||TO_CHA
    -----------
    >juillet <

    SQL> select * from Mois where upper(nomMois) = upper(trim(to_char(sysdate,'month
    ')));

    ID NOMMOIS NUMMOIS
    ---------- -------------------- ----------
    4 JUILLET 7

    Oui,le numMois correspond au numéro du mois 1=janvier,2=fevrier,...mais j'ai pas besoin du numéro du mois mais de son id afin de pouvoir l'insérer dans une autre table.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiante
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Oracle/plsql:aucune donnée trouvée
    En ce qui concerne,la casse ça pourrait effectivement poser un problème pour les autres mois déjà enregistrés à l'exception du mois de JUILLET.En effet,dans ma requête: SELECT id INTO idMois_v FROM Mois WHERE Mois.nomMois = ( SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL);
    SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL; me renvoie le mois de juillet comme ça:JUILLET et dans la table mois juillet est enregistré en majuscule.Donc,le problème de la casse ne se pose pas pour le mois de juillet.D'ailleurs c'est en utilisant SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL; que je l'ai inséré dans ma table mois.

  8. #8
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Il y a à mon avis plusieurs soucis dans votre problème :

    1°) Les soucis de casse
    2°) Les soucis de langue
    3°) Les soucis de logique

    Les soucis de casse ont été expliqués par les précédents posts.

    Concernant les soucis de langue :
    Si vous implémentez votre schéma applicatif sur un environnement ou la langue par défaut n'est pas le français, la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_char(sysdate,'MONTH') from dual
    risque fort de vous renvoyer autre chose que "juillet" et votre application risque tout aussi fort de ne plus fonctionner ... comme le dirait au choix "Fabrice de RTL" ou "BIGARD" : C'est ballot

    Concernant les soucis de logique :
    Si vous implémentez une application dans laquelle vous listez des mois dans une langue, le numéro correspondant au mois et un identifiant, pour des raisons de langue justement, faites plutôt la jointure sur le numéro de mois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_number(to_char(sysdate,'MM')) from dual
    les nombres ont l'avantage de rester constants dans toutes les langues et de n'être pas sensibles à la casse.

  9. #9
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Petite remarque juste au passage (même si c'est pas super important):

    J'ai pas compris pourquoi le champs NUMMOIS est un NUMBER(38) , un NUMBER(2) suffit à recouvrir les 12 mois

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiante
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Oracle/plsql:aucune donnée trouvée
    Bonjour,désolée pour les réponses tardives.Je m'étais déplacée.

    @ojo77:
    - Pour la langue il n'y a pas de souci.En configurant, Symfony j'ai choisi francais comme langue et de plus si je fais: select to_char(sysdate, 'MONTH') from dual;ça me renvoie:"JUILLET".(Tu peux regarder mes précédents posts).Donc,le problème de langue ne se pose pas.
    - Pour la logique: Puisqu’il n'y a pas de souci de langue, là également, il ne devrait pas y avoir de problème. En plus, je ne m'intéresse pas au numéro du mois(numMois) mais à son id pour pouvoir l'insérer dans une autre table.Si tu as bien lu mes posts, tu verras que le numMois peut être différent de son id.

    @Bibeuleuh: Même moi je ne comprends pas.En fait, mon schéma je l'ai créé à partir de doctrine et en générant mes entités j'ai bien précisé pour l'id et numMois à integer mais je les retrouve avec le type number.Mais,je ne pense pas que cela soit à l'origine de mon erreur.

  11. #11
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour,

    Je pense que vous n'avez pas compris le fond de ma remarque.

    Je ne doute absolument pas que dans votre contexte, le to_char(sysdate,'MONTH') fonctionne correctement et ce n'est pas le problème.

    Normalement, lorsque vous faite du développement, ce n'est pas pour que ça fonctionne dans votre environnement de développement mais dans TOUS les environnements sur lesquels votre application doit être déployée, hors ce qui est remonté par la fonction to_char dépend de l'environnement dans lequel vous lancez la fonction (à moins de mettre plus de paramètres à la fonction).

    De ce fait, d'un point de vue logique, si vous me donnez votre application, elle a toutes les chances de ne pas fonctionner chez moi car lorsque je fais to_char(sysdate, 'MONTH') la vilaine me renvoie JULY ou LUGLIO, ça dépend de mon environnement.

    Donc to_char(sysdate, 'MONTH') a une réponse variable en fonction de l'environnement et un développement correcte ne devrait pas se baser dessus.

    Je passe sur l'intérêt de créer une table à trois colonnes pour décrire un mois ( id, numéro du mois, nom du mois) qui ne doit même pas être en FN1 ...

Discussions similaires

  1. Erreur SQL, aucune donnée trouvée
    Par kilwa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/12/2014, 18h05
  2. tOracleSP Aucune donnée trouvée
    Par Yozol dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 11/10/2012, 17h50
  3. Comment Eviter ORA-01403(aucune donnée trouvée)
    Par riadhhwajdii dans le forum PL/SQL
    Réponses: 7
    Dernier message: 28/01/2011, 12h06
  4. ORA-01403: Aucune donnée trouvée
    Par MaRTy59 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 10/08/2010, 11h26
  5. ERREUR Aucune donnée trouvée
    Par TheBlue dans le forum SQL
    Réponses: 1
    Dernier message: 20/05/2008, 23h05

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