Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Administration
Administration Forum d'entraide sur l'administration de PostgreSQL : utilisateurs, privilèges, etc.
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 17/05/2011, 16h03   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 139
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 139
Points : 18
Points : 18
Par défaut Pb suite mise à jour vers Postgresql 9 (bis)

Bonjour,
J'ai une application JSP qui utilise une base de données postgreSQL, que je viens de migrer de la version 7 vers la version 9.
J'ai le message d'erreur suivant à l'appel d'une procédure stockée :
Code :
1
2
ERREUR: entrée manquante de la clause FROM pour la TABLE « biiconfig » 
Où : PL/pgSQL FUNCTION "biielevedemandecompetence_insertion" line 15 at instruction SQL
Le message d'erreur suggère que la clause FROM de la requête est manquante, cependant celle-ci est bien présente :
Code :
SELECT INTO datefin CURRENT_TIMESTAMP + dureedemande FROM biiconfig;
Comment puis-je corriger cette erreur ?
Merci d'avance.
levalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 17h35   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Je me demande s'il ne serait pas nécessaire d'avoir la reste de la fonction pour comprendre l'origine de l'erreur.
estofilo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 08h19   #3
Futur Membre du Club
 
Inscription : juin 2006
Messages : 139
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 139
Points : 18
Points : 18
Voici la fonction PostgreSQL:
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
37
38
39
40
-- Function: biielevedemandecompetence_insertion(integer, integer, text)
 
-- DROP FUNCTION biielevedemandecompetence_insertion(integer, integer, text);
 
CREATE OR REPLACE FUNCTION biielevedemandecompetence_insertion(integer, integer, text)
  RETURNS integer AS
$BODY$
/**DEBUT PROC**/
DECLARE 
 
vIDUTILISATEUR ALIAS FOR $1 ;
vIDCOMPETENCE ALIAS FOR $2;
vJUSTIFICATION ALIAS FOR $3;
 
Result INTEGER ;
CurrentId int4;
datefin timestamp;
 
BEGIN 
	SELECT INTO datefin CURRENT_TIMESTAMP + dureedemande FROM biiconfig;
	CurrentId=NEXTVAL('public.biielevedemandecompetence_id_seq'::text);
        INSERT INTO biielevedemandecompetence (id, idutilisateur, idcompetence, datedemande, justification, datefindemande, etatdemande, dateresultat, max_validation, max_refus) 
	VALUES  (CurrentId, vIDUTILISATEUR, vIDCOMPETENCE, now(), vJUSTIFICATION, datefin, 'D', NULL, biiconfig.nbvalidationdemande, biiconfig.nbmaxrefus);
 
        GET DIAGNOSTICS Result := ROW_COUNT;
 
        IF Result = 0 THEN
                RETURN -1 ;
        ELSE
                RETURN CurrentId ;
        END IF;
 
END
/**FIN PROC**/
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION biielevedemandecompetence_insertion(integer, integer, text) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION biielevedemandecompetence_insertion(integer, integer, text) TO postgres;
GRANT EXECUTE ON FUNCTION biielevedemandecompetence_insertion(integer, integer, text) TO DATA;
levalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h12   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
OK donc c'est l'INSERT qui lève l'erreur et non le SELECT au-dessus.
C'est à cause des références à biiconfig.nbvalidationdemande, biiconfig.nbmaxrefus, car la table biiconfig ne fait pas partie de la requête.
Il y a 2 solutions:
1) changer l'INSERT ... VALUES(...) en INSERT ... SELECT ... FROM biiconfig puisqu'il y a visiblement 1 seule ligne dans biiconfig.
2) créer des variables correspondant à biiconfig.nbvalidationdemande et biiconfig.nbmaxrefus et les remplir dans le SELECT INTO du dessus comme c'est déjà le cas pour la variable datefin.
estofilo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h47   #5
Futur Membre du Club
 
Inscription : juin 2006
Messages : 139
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 139
Points : 18
Points : 18
Salut Estofilo,
effectivement, il n'y a qu'une seule ligne dans biiconfig.
j'ai choisi ta solution 2) et ça marche maintenant.
Merci Estofilo !
[RESOLU]
levalp 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 13h49.


 
 
 
 
Partenaires

Hébergement Web