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 06/11/2004, 18h05   #1
Invité de passage
 
Inscription : novembre 2004
Messages : 1
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1
Points : 0
Points : 0
Par défaut plpgsql et boucles

voila je suis entrain de me battre avec les fonctions en plpgsql

je dois parcourir tout les résultats d'une requête pour pouvoir les déplacer dans une autre table

j'ai le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
iDROP FUNCTION clean_mesure();
CREATE OR REPLACE FUNCTION clean_mesure() RETURNS void AS '
        DECLARE
                tmp RECORD;
                res RECORD;
        BEGIN
                FOR valeurs IN SELECT * FROM mesure WHERE EXTRACT(day FROM current_timestamp-date)<=1 LOOP
                        SELECT INTO res count(carte) FROM archive WHERE carte=valeurs.carte AND date=date(valeurs.date);
                        IF res.count = 0 THEN
                                INSERT INTO acrhive VALUES (date(tmp.date),valeurs.carte,tmp.valeurs);
                        ELSE
                                UPDATE archive SET valeurs[1]=valeurs[1]+tmp.valeurs[1],valeurs[2]=valeurs[2]+tmp.valeurs[2],
                                                   valeurs[3]=valeurs[3]+tmp.mesures[3],valeurs[4]=valeurs[4]+tmp.mesures[4],
                                                   valeurs[5]=valeurs[5]+tmp.mesures[5],valeurs[6]=valeurs[6]+tmp.mesures[6]
                                                   WHERE carte=valeurs.carte AND date=date(valeurs.date);
                        END IF;
 
                END LOOP;
                RETURN NULL;
        END;'
        LANGUAGE 'plpgsql';
j'ai systématiquement le message d'erreur :

ERROR: missing ".." at end of SQL expression


je pense que cela vient de la boucle mais je vois pas trop pourquoi car la plus part des exemples la méthode et celle que j'ai utilisé
sylvainh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2004, 21h25   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Salut,

en fait c'est parce que tu n'as pas declarer ta variable valeurs

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
DROP FUNCTION clean_mesure(); 
CREATE OR REPLACE FUNCTION clean_mesure() RETURNS void AS ' 
        DECLARE 
                tmp RECORD; 
                res RECORD; 
               valeurs RECORD; 
                -- ou encore
                -- valeurs mesure%ROWTYPE;
        BEGIN 
                FOR valeurs IN SELECT * FROM mesure WHERE EXTRACT(day FROM current_timestamp-date)<=1 LOOP 
                        SELECT INTO res count(carte) FROM archive WHERE carte=valeurs.carte AND date=date(valeurs.date); 
                        IF res.count = 0 THEN 
                                INSERT INTO acrhive VALUES (date(tmp.date),valeurs.carte,tmp.valeurs); 
                        ELSE 
                                UPDATE archive SET valeurs[1]=valeurs[1]+tmp.valeurs[1],valeurs[2]=valeurs[2]+tmp.valeurs[2], 
                                                   valeurs[3]=valeurs[3]+tmp.mesures[3],valeurs[4]=valeurs[4]+tmp.mesures[4], 
                                                   valeurs[5]=valeurs[5]+tmp.mesures[5],valeurs[6]=valeurs[6]+tmp.mesures[6] 
                                                   WHERE carte=valeurs.carte AND date=date(valeurs.date); 
                        END IF; 
 
                END LOOP; 
                RETURN NULL; 
        END;' 
        LANGUAGE 'plpgsql';
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h11.


 
 
 
 
Partenaires

Hébergement Web