Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 06/01/2011 19:13:18
- xbry
- Membre
procedure PL/PGSQL
Bonjour,
je souhaire écrire un petit bloc PL/PGSQL pour une utilisation unique.
Il s'agit d'un update d'une table à partir de donnée d'autres tables
j'ai donc écrit le bout de code suivant:
DECLARE
CURS1 CURSOR FOR Select c.cur_lit,
SetSRID(MakeLine(MakePoint(a.coord_x,a.coord_y),MakePoint(b.coord_x,b.coord_y)),27582) ligne
FROM
site a,
site b,
lien c
where
a.dt_photo=c.dt_photo
AND b.dt_photo=c.dt_photo
AND A.cur_site=c.cur_site_a
and b.cur_site=c.cur_site_b
order by c.cur_lit;
Begin
OPEN CURS1;
FOR c1 IN CURS1 Loop
UPDATE lien SET lien.geom = c1.ligne WHERE lien.cur_lit = c1.cur_lit;
End Loop;
CLOSE CURS1;
End;
ça ne fonctionne pas.
apparemment il bloque sur le mot clef OPEN????
le langage plpgsql est pourtant déclaré (Create language...)
Si j'encapsule le bloc par un CREATE FUNCTION POSTGRES est ok.
comment puis-je faire fonctionner mon bloc independemment d'une fonction?
d'avance merci
xavier
Hors ligne
#2 07/01/2011 15:16:45
- Marc Cousin
- Membre
Re : procedure PL/PGSQL
Je ne vois pas comment le code pourrait fonctionner dans une fonction. Le problème est le suivant :
Vu qu'en dessous du OPEN, il y a un FOR, le code génère une erreur : la boucle FOR aussi veut faire un OPEN du curseur.
En fait une boucle FOR, automatiquement, fait un OPEN et CLOSE du curseur. Il vous suffit donc de supprimer cette ligne.
Par contre, je ne comprends pas comment vous voulez l'exécuter hors d'un bloc PL (à moins d'utiliser la nouvelle syntaxe DO de PostgreSQL 9.0)
Marc.
Hors ligne
Pages : 1