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 :

Exploiter une valeur retournée par une une fonction dans une procedure [11g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 102
    Points : 106
    Points
    106
    Par défaut Exploiter une valeur retournée par une une fonction dans une procedure
    j ai une fonction qui retourne (nb_age) qui est le nombre d année d un employé dans une entreprise

    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 or replace FUNCTION CalculAge (matemp employe.mat_emp%TYPE)
       RETURN NUMBER
    AS
       nb_age   NUMBER;
    BEGIN
       SELECT TRUNC (SYSDATE - date_embauche)
         INTO nb_age
         FROM Employe
        WHERE mat_emp = matemp;
     
        RETURN nb_age;
     
    END;
    maintenant je voudrais l exploiter dans une procedure qui augmente de 4% le salaire d’un employé donc Age dans l’entreprise dépasse 2 ans j ai commencé par écrire la procédure mais je sais comment exploiter la valeur retouné dans la fonction j ai commencé par écrire la procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE or REPLACE PROCEDURE Augentation ( matemp IN Employe.mat_emp%TYPE) 
    
    IS
    BEGIN
    UPDATE Employe SET mt_salaire_mp = mt_salaire*0.4
     WHERE matemp = mat_emp AND  je suis boqué à ce niveau
    
      
    END;

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE or REPLACE PROCEDURE Augentation ( matemp IN Employe.mat_emp%TYPE) 
    
    IS
    BEGIN
    UPDATE Employe SET mt_salaire_mp = mt_salaire*0.4
     WHERE matemp = mat_emp AND  
    
    CalculAge(mat_emp) > 2
    
      
    END;
    un truc dans le genre peut-etre ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 102
    Points : 106
    Points
    106
    Par défaut
    pas vraiment mais j ai pu obtenir le bon code ,j ai d'abord appelé appelé la fonction calculage et le resultat je l ai mis dans une variable aug.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT  CalculAge(matemp)INTO aug FROM DUAL;
    voici le code global qui marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create or replace PROCEDURE Augmentation ( matemp IN Employe.mat_emp%TYPE) 
     
    IS
    aug number;
    BEGIN
    SELECT  CalculAge(matemp)INTO aug FROM DUAL;
    UPDATE Employe SET mt_salaire_emp = mt_salaire_emp*1.4
     WHERE matemp = mat_emp AND (  aug>760 ) ;  
    END;
    maintenant mon problème est de savoir comment gérer l exception s est à dire au cas ou les employés n ont pas plus de 2ans dans l entreprise.(je travaille en jour)

  4. #4
    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
    N'employez pas du PL/SQL là où SQL suffit.

  5. #5
    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
    au cas ou les employés n ont pas plus de 2ans dans l entreprise.
    Suite à ton Update tu peux vérifier si tu as correctement mis à jour une ligne, dans le cas contraire tu peux générer une exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IF SQL%ROWCOUNT = 0 THEN 
     
    -- Aucune mise à jour effectuée  
     RAISE ton_exception;
     
    END IF ;

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 102
    Points : 106
    Points
    106
    Par défaut
    Ok merci

  7. #7
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    normalement, tu devrais pouvoir mettre directement dans ton sql

  8. #8
    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
    Evitez d'utiliser des fonctions PL/SQL dans SQL au moins jusqu'à la version 12 et encore...
    N'employez pas du PL/SQL là ou SQL suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE Employe SET mt_salaire_emp = mt_salaire_emp*1.4
     WHERE matemp = mat_emp 
      AND TRUNC (SYSDATE - date_embauche) >760;

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/09/2014, 12h30
  2. Récupérer une valeur retournée par Ajax
    Par Akazed dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 23/01/2012, 12h50
  3. Réponses: 8
    Dernier message: 05/04/2011, 09h06
  4. Récupérer une valeur retournée par une url
    Par Math77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 16/03/2011, 09h14
  5. Réponses: 1
    Dernier message: 13/04/2010, 11h00

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