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

Informix Discussion :

Utilisation de Type TEXT ou CLOB


Sujet :

Informix

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Utilisation de Type TEXT ou CLOB
    Bonjour,

    Je voudrais savoir comment faire pour stocker dans une table de ma base de données informix des textes longs (plus de 2000 caractères), j'ai essayé d'utilisé le type LVARCHAR qui est fonctionne très bien sous informix/unix mais je ne peux pas car utilisant genero studio pour développer quand je recharge le schéma de ma base il m'exclu la table que j'ai crée car le type n'est pas pris en charge...
    Je me suis donc tourné vers les type TEXT et/ou CLOB que genero semble pouvoir gérer, j'arrive bien à créer ma table, par contre je n'arrive pas à y insérer des données...
    Pour info j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into matable(ma_colonne_text) values ('blalblabla...') --> rien
    J'ai essayé le FILETOCLOB en passant par un fichier simple contenant mon text :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into matable(ma_colonne_text) values (FILETOCLOB('monfichier','server') --> rien
    J'ai pas mal cherché sur le net mais étant débutant je ne trouve pas d'explication suffisamment clair, si quelqu'un pouvait m'orienter vers la solution ou sur une méthode que je puisse exploiter pour arriver à mes fins ça serait bien cool...

  2. #2
    Membre habitué
    Homme Profil pro
    Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Inscrit en
    Octobre 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 105
    Points : 162
    Points
    162
    Par défaut
    Bonjour,

    tu butes là sur une vieille question dont la réponse n'est pas pas simple à trouver. Enonçons d'abord les principes, puis évaluons les solutions possibles:

    * LVARCHAR est un type CHAR ( tous les caractères ASCII imprimables ) dont la limite est 32 Ko et qui n'assigne en mémoire et dans ta base que la taille réelle de la données+quelques octets, et qui se manipule dans informix 4GL comme un CHAR
    * TEXT est un type caractère sans limite réelle de taille ( 2 puissance 31 octets) qui ne se manipule pas vraiment, sauf routine en C ou java qui en explore le contenu "à la main"
    * CLOB est un type charactère, max 2 puiss 31 octets, qui se manipule avec la fonction du datablade Basic Text Search bts_contains

    Donc dans l'absolu, le type TEXT s'applique plutôt pour des données "statiques" sur lesquelles tu ne dois pas faire de recherches via sql, ie seulement destinées à l'affichage.

    Restent LVARCHAR sur laquelle tu peux appliquer le prédicat "MATCHES" et CLOB qui bénéficie de la puissante fonction bts_contains.

    La question est que ton outil de développement ne reconnait pas le type de variable LVARCHAR.
    => As tu essayé, dans la définition de ta variable record, de le définir comme CHAR, dont la taille maximale est identique à celle de LVARCHAR? Tu perdrais l'intérêt du gain de place mémoire du LVARCHAR dans ton programme, mais au moins cela devrait marcher ( je n'ai pas testé ).

    Pour le type TEXT, considère ce que j'ai dit plus haut, c'est bien si tu ne fais pas de recherches SQL sur cette colonne, sinon ça n'a pas grand intérêt.

    Pour le type CLOB, qui est généralement plus adapté, l'utilisation de FILETOCLOB est la méthode à utiliser. Je pense seulement que Genero ne doit pas comprendre cette instruction au moment du parsing.
    => As-tu essayé de préparer l'instruction INSERT ? ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LET monfichier = "/home/truc/monfichier.txt"
    LET statement = "insert into matable(ma_colonne_text) values (FILETOCLOB(",monfichier,"\'server\')
    PREPARE ins_monfichier FROM statement
    EXECUTE ins_monfichier
    L'intérêt de cette méthode est de "cacher" la fonction FILETOCLOB à l'application qui ne la comprend pas, mais pas au moteur qui lui la reconnaîtra et l'exécutera.

    Ceci devrait en théorie fonctionner, mais je n'ai pas de Genero installé pour tester.

    Quand tu dis "rien", tu veux dire que l'application ne te retourne même pas d'erreur?

    Essaye de lancer un onstat -gr sql juste avant de tester, et regarde dans la colonne "SQL ERR" si ta session ne renvoie pas d'erreur.

    Si quelqu'un a une autre idée ...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre réponse, j'ai essayé d'utiliser le type CHAR au lieu de LVARCHAR et ça à l'air de bien fonctionner, pour le moment je vais rester sur l'utilisation de ce type qui me parait plus simple pour ce que j'ai à faire.
    Pour ce qui est de l'utilisation du CLOB j'avais effectivement des erreurs d'exécution liées à l'absence d'un dbspacetemp, j'ai donc décidé de passer mon chemin mais j'y reviendrai sans doute plus tard quand j'aurai un peu plus d'expérience sur informix + 4gl ...

  4. #4
    Membre habitué
    Homme Profil pro
    Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Inscrit en
    Octobre 2010
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 105
    Points : 162
    Points
    162
    Par défaut
    Pas de problème!

    Effectivement, le CLOB se contruit sur un sbspace + un tempsbspace. Nous verrons cela en temps voulu!

    @++
    Eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegExp] Tester la valeur d'un input type="text". Utilisation de regExp ?
    Par Johann7751 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/05/2011, 18h05
  2. [SQL CE 3.5] Quel type de champs utiliser pour du texte ?
    Par zax-tfh dans le forum Développement
    Réponses: 10
    Dernier message: 06/03/2009, 16h30
  3. Réponses: 5
    Dernier message: 15/12/2008, 18h15
  4. Condition d'utilisation du type de fichier system.Text
    Par Alain B. dans le forum Langage
    Réponses: 5
    Dernier message: 16/06/2008, 19h55
  5. XPathSelect, utilisation de @TYPE!="texte" ?
    Par Bruno13 dans le forum Delphi
    Réponses: 1
    Dernier message: 13/09/2006, 20h47

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