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

PostgreSQL Discussion :

[ debutant PLPGSQL ] fonction plpgsql


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 24
    Points
    24
    Par défaut [ debutant PLPGSQL ] fonction plpgsql
    bonjour je veu créer une fonction plpgsql qui fait des update; pourriez vous s'il vous plait me corriger. ma fonction vous parraitra peut etre délirante de nulité mais bon c'est mon premier essai :

    CREATE FUNCTION test(integer)returns integer
    DECLARE
    num_affaire ALIAS FOR $1;

    BEGIN
    update Affaire set dateButtoir = "12/12/2005" where numAffaire = num_affaire
    update Cotisant set denomination = "denomination" where numPersonne=num_affaire
    returns 0;
    END;
    ' LANGUAGE plpgsql;


    merci

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    il me semble que c'est :
    et non
    enleve le "s"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Ben dans l'aide il disent returns mais de toute facon avant le return je pense qu'il y a des erreur mais merci quand meme

  4. #4
    Membre habitué Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 131
    Points
    131
    Par défaut
    Il faut aussi, à mon avis que tu rajoutes un AS' après returns integer pour que ça marche et des point-virgules à la fin de chacune de tes requêtes sans oublier d'enlever le s du deuxième return comme l'a précisé piff62.

    bon courage.
    champijulie

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE FUNCTION test(integer)returns integer as
    DECLARE 
    num_affaire ALIAS FOR $1 ;
     
    BEGIN ;
    update Affaire set dateButtoir = "12/12/2005" where numAffaire = num_affaire; 
    update Cotisant set denomination = "denomination" where numPersonne=num_affaire ;
    return 0 ;
    END; 
    ' LANGUAGE plpgsql;
    ca marche tj pas

  6. #6
    Membre habitué Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 131
    Points
    131
    Par défaut
    tu as oublier l'apostrophe après le as et il n'y a pas de point-virgule après le begin. cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE FUNCTION test(integer)returns integer as '
    DECLARE 
    num_affaire ALIAS FOR $1 ; 
     
    BEGIN  
    update Affaire set dateButtoir = "12/12/2005" where numAffaire = num_affaire; 
    update Cotisant set denomination = "denomination" where numPersonne=num_affaire ; 
    return 0 ; 
    END; 
    ' LANGUAGE plpgsql;
    Voilà. bon courage
    champijulie.

  7. #7
    Membre habitué Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 131
    Points
    131
    Par défaut
    tu as oublier l'apostrophe après le as et il n'y a pas de point-virgule après le begin. cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE FUNCTION test(integer)returns integer as '
    DECLARE 
    num_affaire ALIAS FOR $1 ; 
     
    BEGIN  
    update Affaire set dateButtoir = "12/12/2005" where numAffaire = num_affaire; 
    update Cotisant set denomination = "denomination" where numPersonne=num_affaire ; 
    return 0 ; 
    END; 
    ' LANGUAGE plpgsql;

    Voilà. bon courage
    champijulie.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    merci a toi champijulie, ma focntion a bien voulu se compiler, mors de l'execution, un erreur apparait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR:  column "12/12/2005" does not exist
    CONTEXT:  SQL statement "update Affaire set dateButtoir = "12/12/2005" where numAffaire =  $1 "
    PL/pgSQL function "test" line 6 at SQL statement
    je croyais que quand on ecrivais num_affaire ALIAS FOR $1 ; $1 était l'équivalent du paramètre de la fonction.

  9. #9
    Membre habitué Avatar de champijulie
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 131
    Points
    131
    Par défaut
    Normalement c'est bien ça:
    - $1 est bien le parametre de ta fonction mais il ne le remplace pas dans les messages d'erreur (enfin je croit car moi aussi c'est pareil);
    - Essaie de mettre des cotes simples sur la date au lieu des double cotes car c'est une valeur et apparemment il le reconnait en tant que variable;
    - regarde aussi suivant le type de ta colonne si c'est bien comme ça que l'on donne une valeur (si ta colonne est de type date et que ton parametrage est par défaut alors eessaie plutôt avec '2005-12-12')

    Voilà. j'espère que ça marchera.
    champijulie

  10. #10
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par champijulie
    - Essaie de mettre des cotes simples sur la date au lieu des double cotes car c'est une valeur et apparemment il le reconnait en tant que variable;
    Je confirme, l'erreur vient de là. Simple-quotes pour les dates et chaînes de caractères, double-quotes pour les objets de la base (table, champ...)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    j'ai tenté les simples cotes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE FUNCTION test(integer)returns integer as ' 
    DECLARE 
    num_affaire ALIAS FOR $1 ;
     
    BEGIN  
    update Affaire set dateButtoir = '2005-12-12' where numAffaire = num_affaire; 
    update Cotisant set denomination = 'denomination' where numPersonne=num_affaire ; 
    return 0 ; 
    END; 
    ' LANGUAGE plpgsql;
    lors de la compil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR:  syntax error at or near "2005" at character 147
    comprend pas c vraiment le bad ca fait une demi journée queje perd avec cette connerie, jepeut vous dire que ca fout les boules

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    alors j'ai trouvé, pour info, les date c pas entre simple cotes, il faut les doubler, idem pour les chaines de caractaires


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION test(integer)returns integer as ' 
    DECLARE 
    num_affaire ALIAS FOR $1 ;
     
    BEGIN  
    update Affaire set dateButtoir = ''2001-02-16 20:38:40'' where numAffaire = num_affaire; 
    update Cotisant set denomination = ''den'' where numPersonne=num_affaire ; 
    return 0 ; 
    END;
    Attention ca ne conctionne pas avec " mais avec deux fois ' => bizarre mais c comme ca

    Merci pour tout, Vous m'avez guidé vers la force

  13. #13
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    Arf, évidemment ! J'ai tellement l'habitude d'entourer mes procédures stockées par $body$ au lieu d'une apostrophe que j'avais pas fait attention

    Les dates sont à préfixer par des quotes simples, c'est garanti. Mais là, ce qu'il se passait, c'est que tu te trouvais dans une procédure stockée qui a besoin d'un échappement bien précis pour lui faire comprendre où se trouve le début et la fin du code. Dans ton cas, il s'agit de l'apostrophe. Or, il peut arriver que tu aies besoin des apostrophes à l'intérieur de ton code : dans ce cas, tu es obligé de les doubler pour qu'elles soient échappées correctement et non considérées comme le caractère de fin de la procédure stockée.

    Pour plus d'infos, voir la documentation

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

Discussions similaires

  1. appel de fonction plpgsql
    Par gup dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/04/2006, 21h25
  2. fonction plpgsql qui fonctionne pas...
    Par Empty_body dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/01/2006, 18h22
  3. [MySQL] Appel de fonction plpgsql ou plsql...
    Par Empty_body dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/01/2006, 18h56
  4. Fonction plpgsql
    Par Empty_body dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/12/2005, 11h19
  5. Réponses: 8
    Dernier message: 13/09/2005, 17h32

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