IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

ODBC - interprétation valeur NULL


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Par défaut ODBC - interprétation valeur NULL
    Bonjour,

    J'ai une DLL qui rapatrie des données d'une base MySQL et je suis en train de l'adapter pour qu'elle se connecte à une base Oracle.
    Le driver ODBC utilisé est le driver du client 10G.

    Avec Mysql, quand je rapatrie une valeur à NULL, si la variable est de type entier, elle est initialisée automatiquement à 0.

    Avec Oracle, elle n'est pas initialisée, sa valeur est donc aléatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    ...
    strSQL = (SQLCHAR *) "SELECT AA_COD, ROUND(PU_BASE * 100), ROUND(SUPPLEMENT * 100), DT_MODIF, nb_dents, age_min, age_max FROM R_ACTE_IVITE_PHASE ORDER BY AA_COD, DT_MODIF";
     
    	retcode = SQLExecDirect (hstmt, strSQL, SQL_NTS);
    	if (retcode != SQL_SUCCESS)
    		return FALSE;
     
    	i = 0;
    	count = 0;
    	retcode =SQLBindCol (hstmt, 1, SQL_CHAR, code_acte, sizeof (code_acte), &i);
    	retcode =SQLBindCol (hstmt, 2, SQL_C_SLONG, &prix_base, sizeof (prix_base), &i);
    	retcode =SQLBindCol (hstmt, 3, SQL_C_SLONG, &supplement, sizeof (supplement), &i);
    	retcode =SQLBindCol (hstmt, 4, SQL_C_TYPE_DATE, &date_debut, sizeof (date_debut), &i);
    	retcode =SQLBindCol (hstmt, 5, SQL_C_SLONG, &nb_dents, sizeof (nb_dents), &i);
    	retcode =SQLBindCol (hstmt, 6, SQL_C_SLONG, &age_min, sizeof (age_min), &i);
    	retcode =SQLBindCol (hstmt, 7, SQL_C_SLONG, &age_max, sizeof (age_max), &i);
     
    	while ((retcode = SQLFetch (hstmt)) == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    	{
    		sqldate2ingedate (&Date_tmp, &date_debut);
    		while ((memcmp (code_acte, Actes[count].code_acte, 7) != 0)
    		       || (Date_tmp.jour != Actes[count].modif.jour
    			   || Date_tmp.mois != Actes[count].modif.mois || Date_tmp.annee != Actes[count].modif.annee))
    			count++;
     
    		Actes[count].pu_base = UINT32_SWAP_LE_BE (prix_base);
    		Actes[count].supplement = UINT32_SWAP_LE_BE (supplement);
    		Actes[count].nb_dents = (int8) nb_dents;
    		Actes[count].age_min = (int8) age_min;
    		Actes[count].age_max = (int8) age_max;
    		count = 0;
    ...
    	}
    Le champ nb_dents est souvent à null, et du coup, avec Oracle, j'obtiens un nombre qui ne correspond à rien. Sous mysql, j'ai 0.

    Il m'est difficile de modifier les requêtes et de rajouter des NVL, n'y aurait-il pas un paramètre ODBC à modifier pour initialiser par défaut.

    Merci

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    la conversion automatique est dangereuse (NULL et 0 n'ont pas la même signification)
    il faut préférer la conversion manuelle avec NVL

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Par défaut
    ok, je comprends parfaitement que cela puisse être dangereux.
    Mais est-elle cependant possible cette conversion automatique ?
    En fait, le code n'est pas de moi, et je connais pas suffisamment les requêtes et les données pour savoir où rajouter les NVL.
    J'essaye juste d'avoir un fonctionnement identique au driver Mysql en touchant au minimum au code.

  4. #4
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Le driver ODBC le permet peut-être, mais en Oracle pur, ça n'est pas possible.
    Regardez-les options du drivers ODBC...

Discussions similaires

  1. Interprétation des valeurs NULL et '' (double quotes)
    Par thatsallfunk dans le forum Administration
    Réponses: 2
    Dernier message: 09/01/2009, 15h21
  2. requete avec la valeur NULL
    Par Hinkel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/11/2008, 16h39
  3. Selectionner un champ de valeur nulle
    Par arcane dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/09/2003, 14h26
  4. [CR9] conversion de valeurs NULL
    Par ministry dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 12/09/2003, 11h41
  5. Valeurs Nulles ou Valeurs à Zéro
    Par LLaurent dans le forum XMLRAD
    Réponses: 5
    Dernier message: 30/07/2003, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo