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 :

Requête qui ne renvoie aucun résultat


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut Requête qui ne renvoie aucun résultat
    Bonjours j'essaye de calculer le chiffre d'affaires dans une base de données, mais je bloque quand j'appelle ma fonction elle ne renvoie rien du tout..
    Je pense à un problème de portée de variable, mais je ne suis pas sur..


    declare
    pnum varchar2(10);
    chiffre number(10);
    begin
    pnum:= 'V8000';
    chiffre := chiffreV(pnum);
    dbms_output.put_line(chiffre);
    end;
    [2019-03-04 18:14:17] completed in 6 ms

    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
    create or replace function chiffreV(nV varchar2) return number is
      chiffre number(10);
      placeR number;
      PRIX number;
      cursor c1 is select distinct(CLASSE.nomclasse) from CLASSE where classe.numvol=nV;
    begin
      chiffre:= 0;
      for c1_ligne in c1 loop
        select coutvol*CoeffPrix into PRIX
        from VOL inner join CLASSE C2 on VOL.NumVol = C2.NumVol
        where VOL.NumVol=nV and c2.nomclasse=c1_ligne.nomclasse;
     
        select sum(NbPlaces) into placeR
        from RESERVATION
        where numvol=nV and nomclasse=c1_ligne.nomclasse;
        chiffre := chiffre+prix*placeR;
      end loop;
      return chiffre;
     
    end;
    le code que j'ai écrit pour appeler ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    declare
      pnum varchar2(10);
      chiffre number(10);
      tes number(3);
    begin
      pnum:= 'V8000';
      chiffre := chiffreV(pnum);
      dbms_output.put_line(chiffre);
    end;

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Tu as fais un SET SERVEROUTPUT ON avant d'appeler ta fonction?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    je suis sur data grip et j'ai activé l'option en plus si je fais ca


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    declare
      pnum varchar2(10);
      chiffre number(10);
      tes number(3);
    begin
      pnum:= 'V8000';
      chiffre := 3;
      dbms_output.put_line(chiffre);
    end;
    ca me envoie 3, du coup je ne comprend plus rien..

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    J'ai résolu mon problème, je poste quand même ici si quelqu'un a le même problème que moi.
    Le problème était que la fonction sum pouvait renvoyer Null
    J'ai donc fait un if avec un compteur pour lever cette exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count(*) into nb from classe where NumVol=nV;
      if nb=0 then
        raise volNo;
      end if;
    Merci.

  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
    Bonjour,


    Attention aux valeurs NULL dans les opérations arithmétiques
    Si un champs est à NULL alors le résultat sera NULL.

    Tu peux, au choix, inclure dans la ta clause de sélection de ne pas prendre les valeurs NULL ou ajouter un NVL pour forcer une valeur si le champs est à NULL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NVL(NULL,0) FROM dual;

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse, j'y penserai maintenant !

  7. #7
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Pour compléter, si la colonne est CHAR, VARCHAR2 et que tu concatènes avec NULL alors tu n'auras pas NULL (comme avec une addition avec une colonne NUMBER) mais le contenu de ta colonne CHAR ou VARCHAR2.

    En clair, NULL est absorbant avec les NUMBER mais pas avec les CHAR ou VARCHAR2.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

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

Discussions similaires

  1. [MySQL] Requête élémentaire qui ne renvoie aucun résultat
    Par onsmokepas dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/05/2017, 20h16
  2. Requête qui ne retourne aucun résultat en timeout avec un top
    Par olysmar2 dans le forum Développement
    Réponses: 10
    Dernier message: 27/11/2014, 19h35
  3. Réponses: 8
    Dernier message: 04/06/2010, 15h50
  4. Code de calcul qui ne renvoie aucun résultat
    Par joniyyy dans le forum Langage
    Réponses: 9
    Dernier message: 04/10/2008, 19h33

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