Skip site navigation (1) Skip section navigation (2)

Pb d'ouverture de curseur

From: Valérie SCHNEIDER <valerie(dot)schneider(at)meteo(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Pb d'ouverture de curseur
Date: 2004-09-29 09:46:07
Message-ID: 1096451167.27793.44.camel@nazar (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Bonjour,

J'ai un pb d'ouverture de curseur dans un prog C :

[valerie(at)nazar valerie]$ ecpg --version
ecpg (PostgreSQL 8.0.0beta1) 3.2.0


extrait du prog :

...
  EXEC SQL INCLUDE sqlca;
  EXEC SQL BEGIN DECLARE SECTION;
    char sqlstmt[ 30720 ];     // string for sql statement
  EXEC SQL END DECLARE SECTION;
                                                                                
  strcpy( sqlstmt , _strcurs );
                                                                                
  EXEC SQL PREPARE s FROM :sqlstmt;
  EXEC SQL DECLARE CLICURS CURSOR FOR s;
  EXEC SQL OPEN CLICURS;
  if ( _verbose )
    {
      cerr << _("          VS est la :") << endl;
      cerr << _("Open clicurs :")<<sqlca.sqlstate<< endl;
      cerr << sqlstmt << endl;
    }
                                                                                
...

A l'exécution, le PREPARE et le DECLARE se passent bien, et
à l'OPEN j'ai l'erreur sqlcode=-202, soit sqlstate=07001 dont
le libellé est "ECPG_TOO_FEW_ARGUMENTS".

Voici le contenu de la requête :
select u.ID_STATION,u.DAT,u.DAT_CALC,u.DAT_STAMP,u.ORIGINE
,null,null,null ,cast(to_char(dat,'J') as integer) ,u.HRR  from H u 
where  (u.DAT BETWEEN
to_timestamp('10000101000000','YYYYMMDDHH24MISS')::timestamp AND
to_timestamp('30000101000000','YYYYMMDDHH24MISS')::timestamp)  AND
(u.id_station between '31069001' AND '31069001' )   order by DAT

et lorsque j'exécute le prog j'obtiens dans un fichier de trace : 

          VS est la :
Open clicurs :07001
select u.ID_STATION,u.DAT,u.DAT_CALC,u.DAT_STAMP,u.ORIGINE
,null,null,null ,cast(to_char(dat,'J') as integer) ,u.HRR  from H u 
where  (u.DAT BETWEEN
to_timestamp('10000101000000','YYYYMMDDHH24MISS')::timestamp AND
to_timestamp('30000101000000','YYYYMMDDHH24MISS')::timestamp)  AND
(u.id_station between '31069001' AND '31069001' )   order by DAT

Si j'exécute cette requête au travers de psql, elle est correcte
et le résultat est celui espéré. Idem en utilisant un curseur.

Je ne comprends pas en premier lieu le code retour de l'erreur : 07001
n'a a priori pas grand chose à voir avec le OPEN (ce serait plutôt
pour un FETCH).

Quelqu'un a-t-il une idée ?

Merci, Valérie.

-- 


********************************************************************
* Valerie SCHNEIDER             Tel : +33 (0)5 61 07 81 91         *
* METEO-FRANCE                  Fax : +33 (0)5 61 07 81 09         *
* DSI/DEV - Bases de donnees                                       *
* 42, avenue G. Coriolis        Email : Valerie(dot)Schneider(at)meteo(dot)fr *
* 31057 TOULOUSE Cedex - FRANCE         http://www.meteo.fr        *
********************************************************************
* L'information contenu dans ce mail n'a aucun caractere officiel  *
********************************************************************


Responses

pgsql-fr-generale by date

Next:From: Jean-Paul ARGUDODate: 2004-09-29 12:30:58
Subject: Re: Pb d'ouverture de curseur
Previous:From: Christophe MartinDate: 2004-09-27 09:13:58
Subject: Re: bug farceur de pg ?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group