[Postgresql] Procédure avec if ne fonctionne

Résolu
rgdu86 Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   -  
rgdu86 Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai une base de données sur postgresql sur windows et j'ai une procédure qui ne veut pas être créée.

Voici à quoi ressemble ma procédure :

CREATE FUNCTION majsoldebanque ()
RETURNS float
AS
'
declare

idCompte integer;

sens character;

montant money;

if(sens='c') then

update COMPTE set SoldeBanque_Compte=SoldeBanque_Compte+@montant

where Id_Compte=@idCompte

else

update COMPTE set SoldeBanque_Compte=SoleBanque_Compte-@montant

where Id_Compte=@idCompte

endif

end
'
LANGUAGE 'plpgsql';

et voici le message d'erreur qui m'est affiché :

ERROR: syntax error at OR near "c"
LINE 13: IF(sens='c') then
^

********** Erreur **********

ERROR: syntax error at OR near "c"
État SQL :42601
Caractère : 129

Cette fonction me permettrai de mettre à jour un solde de compte bancaire.

Comment faire pour résoudre cette erreur ?

C'est assez important, j'en ai besoin très rapidement.

Par avance, merci.

Bien cordialement.

rgdu86
--
Oui à Ubuntu, Non à Vista
Tout vient à point à qui sait attendre
Configuration: Windows XP
Opera 9.26

2 réponses

  1. amigo
     
    Bonjour,

    Je ne connais pas ce langage mais je vais te donner des pistes par rapport à des langages que je connais.

    if(sens='c') then

    La variable locale sens est definie character mais n'est pas initialisée (aucune valeur ne lui est affectée)..
    Pareil pour idCompte.

    La syntaxe du test if ne serait pas plutot if (sens=='c') then
    Les lignes d'instructions ne devraient pas se terminer par le point-virgule ;

    En esperant t'avoir dépanné un peu
    A+.
    0
  2. rgdu86 Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   65
     
    Après avoir bidouiller dans tout les sens, voici la bonne réponse :

    CREATE OR REPLACE FUNCTION majsoldebanque(idcompte integer, sens bpchar, montant double precision)
    RETURNS double precision AS

    begin
    if(sens=c)then
    update COMPTE set SoldeBanque_Compte=SoldeBanque_Compte+montant
    where Id_Compte=idCompte;
    else
    update COMPTE set SoldeBanque_Compte=SoldeBanque_Compte-montant
    where Id_Compte=idCompte;
    end if;
    end;
    LANGUAGE 'plpgsql' VOLATILE

    Merci quand même amigo.

    Bien cordialement.

    rgdu86
    0