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

 Oracle Discussion :

Aide pour une fonction


Sujet :

Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Aide pour une fonction
    Bonjour je suis débutant en SQL et j'aurais besoin d'aide...
    Je dois concevoir une fonction qui prend un valeur dans une table et retourne la réponse dans une autre colonne de la même table.

    Le code de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE Inscription
    (codePermanent 	CHAR(12) 	NOT NULL,
     sigle 		CHAR(7) 	NOT NULL,
     noGroupe	INTEGER		NOT NULL,
     codeSession	INTEGER		NOT NULL,
     dateInscription DATE		NOT NULL,
     dateAbandon	DATE,
     note		INTEGER,
     cote         CHAR(1),
    CONSTRAINT CléPrimaireInscription PRIMARY KEY 	(codePermanent,sigle,noGroupe,codeSession),
    CONSTRAINT CERefGroupeCours FOREIGN KEY 	(sigle,noGroupe,codeSession) REFERENCES GroupeCours,
    CONSTRAINT CECodePermamentRefEtudiant FOREIGN KEY (codePermanent) REFERENCES Etudiant
    )
    /
    Ce qu'il faut faire est prendre la note et donner la cote correspondante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION fCotePourNote(note_ INTEGER)
      RETURN CHAR;
    BEGIN
      CASE
        WHEN note_ >=90 THEN cote_ := 'A';
        WHEN note_ >=80 AND note_ < 90 THEN cote_ := 'B';
        WHEN note_ >=70 AND note_ < 80 THEN cote_ := 'C';
        WHEN note_ >=60 AND note_ < 70 THEN cote_ := 'D';
        WHEN note_ >=0 AND note_ < 60 THEN cote_ := 'E';
        ELSE cote_ := NULL;
      END CASE;
      RETURN cote_
    END;
    /
    Et faire un update dans la table avec la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE Inscription
    SET cote = fCotePourNote(SELECT note FROM Inscription WHERE codePermanent = 'TREJ18088001' AND sigle = 'INF1110' AND noGroupe = 20 AND codeSession = 32003)
    WHERE codePermanent = 'TREJ18088001' AND sigle = 'INF1110' AND noGroupe = 20 AND codeSession = 32003
    /
    Malheureusement je suis incapable de faire fonctionner ma fonction...

    Merçi d'avance pour votre aide

  2. #2
    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 814
    Points
    17 814
    Par défaut
    Au niveau de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION fCotePourNote(note_ IN INTEGER)
      RETURN CHAR DETERMINISTIC
      IS cote_ CHAR(1);
    BEGIN
      cote_ := CASE
                 WHEN note_ >= 90 THEN 'A'
                 WHEN note_ >= 80 THEN 'B'
                 WHEN note_ >= 70 THEN 'C'
                 WHEN note_ >= 60 THEN 'D'
                 WHEN note_ >=  0 THEN 'E'
               END;
      RETURN (cote_);
    END;
    /
    Notez que j'ai supprimé dans le CASE les AND note_ < 90...
    En effet, le case ne passe à une condition suivante que si l'actuelle n'est pas remplie.
    Le CASE ici est la fonction SQL standard que vous pouvez tester avec dual :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT dummy
         , CASE WHEN dummy = 'X' then 1 else 0 end as test
      from dual;
    Pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE Inscription
       SET cote          = fCotePourNote(note)
     WHERE codePermanent = 'TREJ18088001'
       AND sigle         = 'INF1110'
       AND noGroupe      = 20
       AND codeSession   = 32003
    /

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup!!!!

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

Discussions similaires

  1. Aide pour une fonction
    Par vincent62149 dans le forum Excel
    Réponses: 1
    Dernier message: 06/07/2007, 18h38
  2. [FPDF] Besoin d'aide pour une fonction publipostage..;
    Par dark$hadow dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/02/2007, 16h39
  3. Réponses: 15
    Dernier message: 26/03/2006, 13h10
  4. Aide pour une fonction
    Par mimi060101 dans le forum Scheme
    Réponses: 1
    Dernier message: 24/02/2006, 17h59

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