+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    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 : 3
    Points
    3

    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 :
    insert into matable(ma_colonne_text) values ('blalblabla...') --> rien
    J'ai essayé le FILETOCLOB en passant par un fichier simple contenant mon text :
    Code :
    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 actif
    Homme Profil pro Eric Vercelletto
    Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Inscrit en
    octobre 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Vercelletto
    Âge : 54
    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 : 101
    Points : 155
    Points
    155

    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 :
    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
    Invité de passage
    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 : 3
    Points
    3

    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 actif
    Homme Profil pro Eric Vercelletto
    Achitecte Informix SGBD et applications - IBM Champion - Data Management - Board of Directors IIUG
    Inscrit en
    octobre 2010
    Messages
    101
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Vercelletto
    Âge : 54
    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 : 101
    Points : 155
    Points
    155

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •