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 Re : Général » Valeurs NULL avec ecpg » 30/12/2009 14:47:12

Tout à fait, comme vous le dites il s'agit ici d'une API, dans un contexte un peu plus balisé qu'un simple programme C.
Alors bien sur qu'il faut utiliser les indicateurs pour tester la valeur NULL d'une variable (la doc indique que la valeur est ignorée, cela va donc dans ce sens), mais moi je dis que ca ne mangerait pas de pain d'initialiser a chaine vide (stratégie classique : ceinture et bretelles wink).

#2 Re : Général » Valeurs NULL avec ecpg » 29/12/2009 22:02:25

Ce qui me perturbe c'est que la variable reçoive une mauvaise valeur par effet de bord (sur l'exemple la troisième ligne reçoit la valeur de la deuxième).
Du coup l'utilisation des indicateurs est plus que nécessaire effectivement.

#3 Re : Général » Valeurs NULL avec ecpg » 29/12/2009 20:10:52

Oui, informix renvoie une chaine vide.
En outre le mode de compatibilité informix (ecpg -C INFORMIX) ne change rien au problème.

#4 Re : Général » Valeurs NULL avec ecpg » 29/12/2009 18:21:09

Dommage pour la compatibilité avec le code informix existant...
Je persiste néanmoins à penser que le comportement est piégeux.

Merci de la réponse

#5 Général » Valeurs NULL avec ecpg » 29/12/2009 14:01:26

lantic
Réponses : 9

Bonjour

J'ai constaté un comportement qui me semble troublant en voulant récupérer des données, dont certaines à NULL:
Si le curseur rencontre un champ NULL alors que le précèdent enregistrement ne l'était pas, le champ courant contient encore la valeur du champ précédent :

Exemple sur une table test :

john    (null)
paul    smith
marilyn    (null)

Résultat : (entre parenthèse la valeur de l'indicateur)
john     (0) (-1)
paul     (0) smith    (0)
marilyn  (0) smith    (-1)

Je me doute qu'il faut utiliser la valeur de l'indicateur mais ce comportement me parait troublant, je suis sur une migration informix ->pg et le champ reste bien à NULL comme le montre l'éxécution avec ce dernier :
john     (0) (-1)
paul     (0) smith    (0)
marilyn  (0) (-1)

Cela se produit aussi bien en bpchar qu'en varchar

Source du programme :

CREATE TABLE test
(
  a character varying(9),
  b character varying(9)
)
main() {
EXEC SQL BEGIN DECLARE SECTION;
char a[10];
char b[10];
int a_ind;
int b_ind;
EXEC SQL END DECLARE SECTION;

...
EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test;
EXEC SQL OPEN foo;
EXEC SQL FETCH FROM foo INTO :a :a_ind, :b :b_ind;

while (sqlca.sqlcode == 0) {
    printf("%s(%d) %s(%d)\n", a, a_ind, b, b_ind);
    EXEC SQL FETCH FROM foo INTO :a :a_ind, :b :b_ind;
}


EXEC SQL CLOSE foo;
EXEC SQL DISCONNECT ALL;

return EXIT_SUCCESS;

}

VERSION = PostgreSQL 8.4.1

Pied de page des forums

Propulsé par FluxBB