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 01/10/2015 13:09:32

jacques
Membre

ecpg : indicateur (variable indicatrice) et type varchar

Bonjour,

Dans le cadre de tests avec ecpg (PostgreSQL 9.4.0) 4.10.0, j'ai rencontré deux difficultés :


===> Primo :
test sur valeur de l'indicateur (variable indicatrice de marqueur NULL) d'une variable float


Le programme ecpg :
=================
...
connexion();


EXEC SQL BEGIN DECLARE SECTION;
float ff;
int i_ff;
EXEC SQL END DECLARE SECTION;


EXEC SQL SELECT 1256898899999885888855424885522.125666666558855555555555555555555555555554458955 INTO :ff :i_ff ;


if (i_ff == 0) printf("indicateur 0 ; résultat valeur ind : %f %d \n", ff, i_ff);
if (i_ff > 0) printf("indicateur positif (valeur tronquee) ; résultat valeur ind : %f %d \n", ff, i_ff);


return 0;


Le résultat du lancement de l'exécutable :
========================================
indicateur 0 ; résultat valeur ind : 1256898867335759245102806990848.000000 0


La question :
===========
Pourquoi l'indicateur vaut 0 (n'est donc pas strictement positif) alors que la valeur est tronquée (modifiée) ?




===> Secundo :
test sur variable varchar

Selon http://docs.postgresqlfr.org/9.4/ecpg-variables.html, paragrahe " 33.4.6. Indicateurs " :
"
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR val;
int val_ind;
EXEC SQL END DECLARE SECTION:
...
EXEC SQL SELECT b INTO :val :val_ind FROM test1;
"


Le programme ecpg :
=================
...
connexion();


EXEC SQL BEGIN DECLARE SECTION;
varchar vv;
int i_vv;
EXEC SQL END DECLARE SECTION;


EXEC SQL SELECT 'ceci est une chaine de caracteres' INTO :vv :i_vv ;


return 0;


A la pré-compilation ecpg :
=========================
ERREUR : les pointeurs sur des chaînes de caractères (varchar) ne sont pas implantés


Question :
========
Pourquoi ce message d'erreur alors qu'un exemple est donné dans la doc. PostgreSQL 9.4 citée ci-avant ?


Merci par avance.

Hors ligne

#2 05/10/2015 18:06:18

jacques
Membre

Re : ecpg : indicateur (variable indicatrice) et type varchar

Bonjour,

La réponse de la part de Michael Meskes :
"
> Why the indicator equals 0 (is not strictly positive) and the value is
> truncated (modified) ?

Because according to standard C types it is not truncated. The string does
have more digits tha a flot can handle, but they are all valid, i.e. a
convesion does correctly eat them all but the internal representation is not
able to store them all.

You bring up an interesting point here, the data is not exactly truncated, it
is just rounded. Not sure what (if anything) the standard says.

> Why this error message whereas an example is given in the PostgreSQL 9.4
> documentation (see above) ?

I guess the documentation is wrong, but I have to look into it. Normally the
varchar type needs a length (as an array of char) or it will become a pointer
to char.
"

Hors ligne

Pied de page des forums