Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 23/11/2004, 09h29   #1
Membre habitué
 
Développeur informatique
Inscription : octobre 2003
Messages : 448
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2003
Messages : 448
Points : 134
Points : 134
Par défaut Faire un test dans une procédure

Je voudrais réaliser un test dans une procédure mais j'au un soucis, voici ma procédure :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE PROCEDURE DEMANDE_PEC (
  NUM_DEMANDE INTEGER,
  ID_USER INTEGER
)  AS        
DECLARE VARIABLE GESTION_BUDGET_PAR CHAR(5);
BEGIN
 
SELECT GESTION_BUDGET_PAR 
FROM PARAM_BT 
INTO 
  :GESTION_BUDGET_PAR;
 
IF( GESTION_BUDGET_PAR = "Services") THEN
UPDATE CENTRE_COUT SET 
 BUDGET = ((SELECT BUDGET FROM CENTRE_COUT WHERE ID_CENTRE_COUT = (SELECT COMPTEIMPUTATION FROM DEMANDES WHERE ID_DEMANDE = :NUM_DEMANDE)) - ((SELECT TARIF FROM DEMANDES WHERE ID_DEMANDE = :NUM_DEMANDE)/1000))
WHERE ID_CENTRE_COUT = (SELECT COMPTEIMPUTATION FROM DEMANDES WHERE ID_DEMANDE = :NUM_DEMANDE)
;
 
IF( GESTION_BUDGET_PAR = "Utilisateurs") THEN
UPDATE UTILISATEURS SET 
 BUDGET = ((SELECT BUDGET FROM UTILISATEURS WHERE ID_USER = :ID_USER) - ((SELECT TARIF FROM DEMANDES WHERE ID_DEMANDE = :NUM_DEMANDE)/1000))
WHERE ID_USER = :ID_USER
;
 
END
PrinceMaster77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2004, 09h55   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Par défaut Re: Faire un test dans une procédure

Il serait bon de préciser votre probleme :
Notamment si votre probleme se passe lors de la création de ma procédure ou lors de son exécution et s'il y a un message d'erreur de le préciser...

Sinon mes remarques concernant ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE PROCEDURE DEMANDE_PEC (
  NUM_DEMANDE INTEGER,
  ID_USER INTEGER
)  AS        
DECLARE VARIABLE GESTION_BUDGET_PAR CHAR(5);
BEGIN
...
IF( GESTION_BUDGET_PAR = "Services") THEN
...
IF( GESTION_BUDGET_PAR = "Utilisateurs") THEN
...
END
Je ne vois pas la déclaration de la variable "Services" ni de la variable "Utilisateurs". En effet les doubles cotes permettent d'utiliser des noms d'objet SQL en utilisant des caractères moins standard (minuscules par exemple).

Si ce ne sont pas des variables que vous vouliez utiliser mais des chaines de caractères il faut utiliser la simple cote :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE PROCEDURE DEMANDE_PEC (
  NUM_DEMANDE INTEGER,
  ID_USER INTEGER
)  AS        
DECLARE VARIABLE GESTION_BUDGET_PAR CHAR(5);
BEGIN
...
IF( GESTION_BUDGET_PAR = 'Services') THEN
...
IF( GESTION_BUDGET_PAR = 'Utilisateurs') THEN
...
END
Mais dans ce cas là vous n'aurez jamais GESTION_BUDGET_PAR égale à une de ces deux chaines car GESTION_BUDGET_PAR est un CHAR sur 5 caractères et 'Services' ou 'Utilisateurs' sont sur plus de 5 caractères. Donc il faut soit revoir vos chaines soit revoir votre déclaration de GESTION_BUDGET_PAR.

Dernière remarque :
Code :
1
2
3
4
SELECT GESTION_BUDGET_PAR 
FROM PARAM_BT 
INTO 
  :GESTION_BUDGET_PAR;
celà marchera uniquement si dans votre table PARAM_BT vous n'avez qu'un seul enregistrement.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h27.


 
 
 
 
Partenaires

Hébergement Web