Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 22h26   #1
Invité de passage
 
Inscription : novembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 18
Points : 1
Points : 1
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 :
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 :
Execute Augmenter('P1',10) ;
le shema de ma table est comme suit:
Code :
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 :
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
sheridan08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 19h02   #2
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

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

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
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 ?
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 10h27   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Code :
SELECT budjet INTO anc_bdg FROM projet WHERE codeprj=numprojet;
renvoie une exception de type NO_DATA_FOUND.

Encapsule comme ceci :

Code :
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;
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 13h53   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
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 :
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;
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h41.


 
 
 
 
Partenaires

Hébergement Web