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 |
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.