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 :

Exécution d'une procédure


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    informatique
    Inscrit en
    Novembre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 167
    Par défaut Exécution d'une procédure
    bonsoir a tous
    voila j'ai un souci avec ma fonction , le probleme c'est qu'elle marche sur une autre machine mais pas sur la mienne
    d'abord voici le code:
    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 PROCEDURE Augmenter (numprojet varchar, pourcent integer) IS
    anc_bdg integer;
    new_bdg integer;
    incoherence EXCEPTION;
    BEGIN
    select budjet into anc_bdg from projet where codeprj=numprojet;
    new_bdg := anc_bdg+(anc_bdg*pourcent)/100;
    IF (new_bdg <= 6000000) THEN RAISE incoherence;
    ELSE
    UPDATE PROJET SET budjet = new_bdg WHERE codeprj = numprojet;
    END IF;
    EXCEPTION WHEN incoherence THEN
    dbms_output.put_line('Le nouveau budget a depassé 6000000');
    END;/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execute Augmenter('P1',10) ;
    le shema de ma table est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table Projet (CodePrj char (4) primary key, Date_debut date, Date_Fin date, Responsable char(40),TypePrj char(9), budjet number(9));
    et mes erreur sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ERROR at line 1:
    ORA-01403: no data found
    ORA-06512: at "User.AUGMENTER", line 6
    ORA-06512: at line 1
    je pense qu'il n'execute pas le (select into d'apres le type d'erreur), mais j'ai verifié les tuples sont bien inserés
    si quelqu'un a une idée !je suis preneuse
    merci d'avance

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    Manifestement le SELECT ne renvoie rien.
    Que contient la table Projet pour le projet P1 ?
    Est-ce que le SELECT exécuté manuellement avec ces paramètres retourne quelque chose ?

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT budjet INTO anc_bdg FROM projet WHERE codeprj=numprojet;
    renvoie une exception de type NO_DATA_FOUND.

    Encapsule comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    BEGIN 
           SELECT budjet INTO anc_bdg FROM projet WHERE codeprj=numprojet;
    EXCEPTION 
           WHEN NO_DATA_FOUND THEN 
              -- que fait on dans ce cas là
           WHEN TOO_MANY_ROWS THEN
               -- et dans celui ci 
    END;

  4. #4
    Membre Expert 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 : 51
    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
    Par défaut
    Pour un select into, l'instruction select doit remonter une et une seule ligne.

    Si moins de une, alors l'exception NO_DATA_FOUND est levée.
    Si plus d'une, alors l'exception TOO_MANY_ROWS est levée.

    On peut contourner en utilisant, par exemple, un curseur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
     for c in (SELECT budjet  FROM projet WHERE codeprj=numprojet)
     loop
      anc_bdg:=c.budget;
      -- suite des traitements
     end loop;
    end;

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

Discussions similaires

  1. Exécution d'une procédure stockée dans Sql
    Par Pascalp dans le forum Access
    Réponses: 4
    Dernier message: 01/09/2006, 11h47
  2. [MySQL 5.1]Exécution d'une procédure au démarrage du serveur.
    Par Alexandre T dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/06/2006, 14h54
  3. Accès non autorisé à l'exécution d'une procédure stockée
    Par celine33 dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/01/2006, 10h27
  4. [VB6] Durée d'exécution d'une procédure
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 14h51
  5. Réponses: 15
    Dernier message: 08/07/2004, 08h20

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