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 :

[Pl/pgSQL] Erreur sur l'execution d'une fonction.


Sujet :

PostgreSQL

  1. #1
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Points : 849
    Points
    849
    Par défaut [Pl/pgSQL] Erreur sur l'execution d'une fonction.
    Bonjour bonjour,
    Voila, j'ai fais une petite fonction pour assurer une coherence de mes données, il semble que je n'ai pas d'erreur de syntaxe (il compile sans problème), cependant, j'obtiens une erreur dont le sens m'échapte, et le conseil qui suit me semble d'autant plus obscur.

    Voici ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    Create Function F_Ajout_Livre (Varchar(60), Varchar(25), Bytea, Varchar(50), Smallint)
    --                             titre        auteur       couv   MIME         droitGroupeDefaut
    Returns boolean
    As
    '
    Declare
     
        nTitre Alias For $1;
        nAuteur Alias For $2;
        nCouverture Alias For $3;
        nMime Alias For $4;
        nDroitDefautGroupes Alias For $5;
        nId char(32) := md5( titre || auteur );
     
    Begin
     
        If droitDefautGroupes Is Between 2 And 5 Then
     
            Insert Into livre (md5id, titre, couverture, couverturemime, droitdefaut)
            Values (nId , nTitre, nCouverture, nMime, nDroitDefautGroupes);
     
            Insert Into avoir (auteur, droit, livre)
            Values (nAuteur, 0, nId);
     
            Return True;
     
        End If;
     
        Raise Notice ''Le niveau de droti par défaut doit être compris entre 2 et 5.'';
        Return False;
    End;
    '
    Language plpgsql;
    Et voici le message que j'obtiens en retour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR:  function public.f_ajout_livre("unknown", "unknown", "unknown", "unknown", integer) does not exist
    HINT:  No function matches the given name and argument types. You may need to add explicit type casts.
    Pourriez vous éclairer ma lenterne? et si possible, m'aider à résoudre mon problème?
    Ancien membre du projet "Le Dernier Âge".

  2. #2
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Points : 849
    Points
    849
    Par défaut
    J'ai trouvé d'où venait le problème, c'etait à l'appel de ma fonction, je devais utiliser
    CAST(valeur AS type)
    Mais je suis confronté à un autre problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ERROR:  column "titre" does not exist
    CONTEXT:  PL/pgSQL function "f_ajout_livre" line 10 at block variables initialization
    Pourtant voici ma table livre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    CREATE TABLE "public"."livre" (
      "md5id" CHAR(32) NOT NULL, 
      "titre" VARCHAR(60) NOT NULL, 
      "couverture" BYTEA, 
      "couverturemime" VARCHAR(50), 
      "nbchaps" SMALLINT DEFAULT 0 NOT NULL, 
      "droitdefaut" SMALLINT DEFAULT 3 NOT NULL, 
      CONSTRAINT "pk_livre" PRIMARY KEY("md5id"), 
      CONSTRAINT "fk_livre_droit" FOREIGN KEY ("droitdefaut")
        REFERENCES "public"."droit"("niveau")
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
        NOT DEFERRABLE
    ) WITH OIDS;
     
    CREATE INDEX "idx_livre_titre" ON "public"."livre"
      USING btree ("titre");
    la colonne titre existe bien, mais pour le SGBD elle n'existe pas, quelle est le problème?
    Est-ce à cause de l'index?
    Ancien membre du projet "Le Dernier Âge".

  3. #3
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Points : 849
    Points
    849
    Par défaut
    c'etait une erreur toute bête, j'ai résolu, utilisant la fonction md5 dans le bloc begin ... end, plutot que dansle bloc de declaration. J'ai aussi modifié quelques noms de variables/colonne que j'avais mal saisi par étourderie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Create Function F_Ajout_Livre (Varchar(60), Varchar(25), Bytea, Varchar(50), Smallint)
    --                             titre        auteur       couv   MIME         droitGroupeDefaut
    Returns boolean
    As
    '
    Declare
     
        nTitre Alias For $1;
        nAuteur Alias For $2;
        nCouverture Alias For $3;
        nMime Alias For $4;
        nDroitDefautGroupes Alias For $5;
        nId char(32);
     
    Begin
     
        If nDroitDefautGroupes Between 2 And 5 Then
     
            nId := md5( nTitre || nAuteur );
     
            Insert Into "livre" (md5id, titre, couverture, couverturemime, droitdefaut)
            Values (nId, nTitre, nCouverture, nMime, nDroitDefautGroupes);
     
            Insert Into "avoir" (personnage, droit, livre)
            Values (nAuteur, 0, nId);
     
            Return True;
     
        End If;
     
        Raise Notice ''Le niveau de droit par défaut doit être compris entre 2 et 5.'';
        Return False;
     
    End;
    '
    Language plpgsql Returns Null On Null Input Security Invoker;
    J'espère que ce monologue sera utilie à d'autres, qui rencontreront le même genre de problèmes
    Ancien membre du projet "Le Dernier Âge".

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

Discussions similaires

  1. [VB.Net] Pourquoi ai-je une erreur à l'exécution d'une requête ?
    Par zooffy dans le forum Accès aux données
    Réponses: 3
    Dernier message: 25/06/2006, 10h35
  2. Erreur PLSQL lors de l'execution d'une fonction
    Par chicken92000 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 17/03/2006, 17h12
  3. Erreur sur l'ouverture d'une fenêtre popup
    Par misa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/11/2005, 15h21
  4. erreur dans l'execution d'une requete
    Par marsupilami34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/09/2005, 16h47
  5. Execution d'une fonction lors de l'appui sur CTRL+ALT+I
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 17/03/2004, 01h35

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