Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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/09/2005, 22h10   #1
Membre expérimenté
 
Avatar de Floréal
 
Inscription : novembre 2004
Messages : 408
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2004
Messages : 408
Points : 557
Points : 557
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 :
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 :
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?
Floréal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2005, 15h28   #2
Membre expérimenté
 
Avatar de Floréal
 
Inscription : novembre 2004
Messages : 408
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2004
Messages : 408
Points : 557
Points : 557
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 :
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 :
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?
Floréal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2005, 00h48   #3
Membre expérimenté
 
Avatar de Floréal
 
Inscription : novembre 2004
Messages : 408
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2004
Messages : 408
Points : 557
Points : 557
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 :
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
Floréal 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 23h58.


 
 
 
 
Partenaires

Hébergement Web