PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#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

Pied de page des forums