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

SQL Oracle Discussion :

incohérence de donnée


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut incohérence de donnée
    bonjour
    je vient de faire une base de donnée d'une bibliothèque
    mon problème c'est que lorsque j'ai fait une requête de sélection la clause where n'as pas accepter la comparaison d'un type de donnée clob avec ce qui es demander
    voici le code de la requête sachant que l'attribu état est de type clob

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select exemplaire.numinv,exemplaire.dateachat,exemplaire.etat,exemplaire.livre
    from exemplaire
    where exemplaire.etat='Neuf';

    lorsque je lance cette requete en m'affiche le message d'erreur :
    type de donnée incohérant ;attendu : - ; obtenu : clob

    comment je peux corriger cela svp
    merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Quel est l'intérêt d'avoir mis cette colonne nommée 'etat' de type CLOB ?
    Un simple VARCHAR aurait suffit.

    Et même mieux, une clé étrangère de type entier non signé faisant référence à l'identifiant d'un état figurant dans une table des états.

    Je ne savais même pas que ça existait d'ailleurs ce type !

    D'une manière générale, je n'ai jamais utilisé de type BLOB ou apparenté.

    Un gros texte ou une image ou un objet binaire quelconque se stocke à part, hors de la base de données, laquelle ne stocke que le chemin vers le fichier.
    Ca évite d'avoir des BDD gigantesques pour rien.

    Seul cas de type BLOB que je vois utile : la géomatique. On stocke des corrdonnées de polygones représentant des entités géographiques dans des colonnes de ce type car il y a des outils qui les manipulent directement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Quel est l'intérêt d'avoir mis cette colonne nommée 'etat' de type CLOB ?
    Un simple VARCHAR aurait suffit.
    je ne savais pas que un type clob prenais un tel espace mémoire
    mais j'ai pas voulu prendre un type varchar parce que je ne sais pas la taille exacte de ce type
    il y a le varchar(8) varchar (7) etc...
    comment je peux savoir le nombre de caractère stocker dans un varchar(n) avec n un entier donnée

    Citation Envoyé par CinePhil Voir le message

    Et même mieux, une clé étrangère de type entier non signé faisant référence à l'identifiant d'un état figurant dans une table des états.
    si tu pouvais me donner une idée pour résoudre le problème avec cette méthode svp
    j'adore les clés étrangères
    merci

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Le problème du clob, c'est que pour les index, et donc pour les recherches sur cette colonne, c'est pas top.
    Et là en gros tu te sers d'un dépôt régional d'hypermarché pour y ranger une boîte de sardines !

    Revenons à la modélisations des données.

    Tu as donc des exemplaires qui sont dans un certain état.

    La règle de gestion est la suivante :
    Un exemplaire est d'un seul état et un état peut qualifier plusieurs exemplaires.

    Il en découle le MCD suivant :
    Etat -0,n----Qualifier----1,1- Exemplaire

    Il en découle les tables suivantes :
    Etat (Et_Id, Et_Libelle...)
    Exemplaire (Ex_Id, Ex_IdEtat...)

    Pour la colonne Et_Libelle, un VARCHAR(16) doit largement suffire.
    Dans la liste (Neuf, Bon, Moyen, Mauvais), la longueur maxi est de 7 caractères donc un VARCHAR(8) serait suffisant si tu es sûr de ne pas mettre des libellés plus longs ensuite.

    Quand aux colonnes d'identifiant, ce sont des entiers non nuls, non signés et auto-incrémentés. Les clés étrangères seront de ce fait des entiers non signés.

    Je vois que ta table Exemplaire contient aussi une colonne appelée Livre. Là aussi, il devrait s'agir d'une clé étrangère pointant vers la table des livres.

    Règle de gestion :
    Un livre comporte de 1 à plusieurs exemplaires et un exemplaire se rapporte à un seul livre.

    MCD :
    Livre -1,n----Comporter----1,1- Exemplaire

    Tables :
    Livre (L_Id, L_Titre...)
    Exemplaire (Ex_Id, Ex_IdLivre, Ex_IdEtat...)

    Si tu appliques cette méthode à toutes tes données, tu auras plus de chances d'avoir un schéma normalisé et optimum.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut
    ouais tu as raison
    j'ai donné trop d'espace mémoire pour les données
    mais pour le varchar(8) c'est une chaine de caractére de longueur conbient exactement
    je veux pas prendre des risques de manque quand meme
    et puit comment je peux modifer le type de la valeur clob en une valeur varchar(8)
    j'ai deja remplis le tableau
    es ce que je dois vider les donnés puit modifier les types des variables ou c'est possible de les modifier sans effacer les données
    j'ai essayer la commande

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter table exemplaire 
    modify etat varchar(8);

    mais ca donne un message d erreur :
    modification non valide des colonnes


    en fete
    je crois que je ne peux pas utiliser la méthaude de cle étranger pour l'état car etat est un attribut de l'entité exemplaire
    ce n'es pas une table lier a la table exemplaire et qui a une cle primere
    on ne peux pas utiliser la méthaude de clé etranger dans ce cas
    vous pensez pas ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    pour le varchar(8) c'est une chaine de caractére de longueur conbient exactement
    Ben ce sera au maximum 8 caractères. Le nombre entre parenthèses indique la longueur maxi acceptée dans la colonne.

    comment je peux modifer le type de la valeur clob en une valeur varchar(8)

    j'ai deja remplis le tableau
    Puisque tu as déjà rempli la table (et pas le tableau !), tu peux chercher quelle est la longueur maxi de la colonne etat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(CHARACTER_LENGTH(etat)) AS longueur_etat_maxi
    FROM exemplaire
    Ceci te permettra de calibrer la valeur maxi de ton VARCHAR.

    Ensuite selon ton SGBD, tu peux directement faire une requête ALTER TABLE toute simple ou suivre la méthode plus rigoureuse de SQLPro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut
    excuser moi mais j'utilse oracle 10g version express

Discussions similaires

  1. Perte de lien et incohérence de données
    Par PAYASS59 dans le forum Webi
    Réponses: 11
    Dernier message: 05/03/2012, 16h16
  2. étude d'incohérence de données
    Par sanach dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 24/10/2007, 13h25
  3. Erreur ORA-00932 types de données incohérents
    Par paradeofphp dans le forum Oracle
    Réponses: 7
    Dernier message: 21/05/2007, 10h56
  4. ETAT: Incohérence entre le Graphique et les données
    Par Alain LF dans le forum Access
    Réponses: 1
    Dernier message: 02/05/2006, 09h49
  5. types de données incohérents
    Par afaraji dans le forum Oracle
    Réponses: 4
    Dernier message: 22/12/2005, 13h52

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