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 :

Extension des Types de Données(CHAR,CLOB)


Sujet :

Oracle

  1. #1
    Membre averti Avatar de blackstreet
    Inscrit en
    Avril 2004
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 304
    Points : 335
    Points
    335
    Par défaut Extension des Types de Données(CHAR,CLOB)
    Bonjour,

    je travaille sur ORACLE 9i, et j'ai une table dans laquelle je stoque des requete, que je lance séquentiellement à travers un script SHELL.
    le problème, c'est que j'ai une structure de table bien défini, et que j'aimerais pas changer, et le problème réside, que parfois, j'ai des requête dans la taille dépasse les 4000 caractères, et puisque ORACLE ne permet pas d'extraire des données de plus que 4000 caractères, je suis obligé de passé par le découpage des requêtes et le passage par un fichier que j'éxécute.
    ce travaille ne m'aide pas, car j'ai beaucoup d'autres contrôles à faire.
    j'ai essayé avec des CLOB, mais c'est la même chose.
    y'a t'il un moyen pour pouvoir extraire plus que 4000 caractères dans oracle, sans passer par le découpage des données.

    et merci,

    Cordialement.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut Re: Extension des Types de Données(CHAR,CLOB)
    Citation Envoyé par blackstreet
    j'ai essayé avec des CLOB, mais c'est la même chose.
    y'a t'il un moyen pour pouvoir extraire plus que 4000 caractères dans oracle, sans passer par le découpage des données.
    c'était apparament un mauvai essai !
    le type CLOB permet de manipuler des millions d'octets. Comment vous-y êtes vous pris ?

  3. #3
    Membre averti Avatar de blackstreet
    Inscrit en
    Avril 2004
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 304
    Points : 335
    Points
    335
    Par défaut
    Bonjour,
    merci pour votre réponse.

    Voila ce que j'ai fais :

    Au début, le type de la colonne était char(3999), donc je ne pouvais stoquer que des requete à 3999 caractères.
    et puisque mon besoin était en faite de stoquer des requete énormes, alors j'ai changer le type de la colonne en CLOB, et j'ai réussi à stoquer la totalité de mes requêtes, (environ 28000 caratères chacune).
    mais le problème est que je fais un select, je n'ai comme résultat que les 4000 premier caractères.
    Mon programmes en questions, fais un select sur la tables des requêtes, et insére le résultat dans un fichier et ensuite il éxécute le fichier comme requete SQL.
    DONC je suis d'acord avec toi que le type CLOB permet de stoquer des millions de requete, mais je ne sais pas si c'est un paramétrages dans ORACLE ou pas, l'éxécution d'une requêtes, ne ramène que 4000 caractères.

    y'a t'il un moyen de changer ce paramètres?
    ET merci.

    Cordialement.

  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
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par blackstreet
    (...)
    mais le problème est que je fais un select, je n'ai comme résultat que les 4000 premier caractères.
    (...)
    Quel est donc votre code, votre select exactement ?

    [edit]
    Si vous utilisez SQL*Plus, peut-être est-ce que vous devriez jour avec le paramètre "long" : SET LONG {80 | n}
    SET LONG {80 | n}

    Sets maximum width (in bytes) for displaying CLOB, LONG, NCLOB and XMLType values; and for copying LONG values.

    Querying LONG columns requires enough local memory to store the amount of data specified by SET LONG, irrespective of the value of the SET LONGCHUNKSIZE command. This requirement does not apply when querying LOBs.

    It is recommended that you do not create tables with LONG columns. LONG columns are supported only for backward compatibility. Use LOB columns (CLOB, NCLOB) instead. LOB columns have fewer restrictions than LONG columns and are still being enhanced.

    The maximum value of n is 2,000,000,000 bytes.

    Example

    To set the maximum number of bytes to fetch for displaying and copying LONG values, to 500, enter

    SET LONG 500

    The LONG data will wrap on your screen; SQL*Plus will not truncate until the 501st byte. The default for LONG is 80 bytes.
    [/edit]

  5. #5
    Membre averti Avatar de blackstreet
    Inscrit en
    Avril 2004
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 304
    Points : 335
    Points
    335
    Par défaut
    Salut,

    En Faites , la requete est une simple select;

    Voici un exemple : si la tables est : ETAT_REQUETE, et que la colonne contenant la requete que je dois extraire est REQUETE (contenant du code SQL PLUS) de type CLOB; la colonne ID est l'identifiant de la requete:

    je fais : select REQUETE from ETAT_REQUETE where ID = 'TEST'; et là, je n'ai en résultat que les 4000 premier caractères.

    je la met ou SET LONG?

    ET merci

  6. #6
    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
    Points : 3 199
    Points
    3 199
    Par défaut
    Directement au prompt SQL> (sous SQL*Plus) ! ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> select sql_fulltext from v$sqlarea where rownum = 1;
     
    SQL_FULLTEXT
    --------------------------------------------------------------------------------
    delete from WRH$_LATCH_BL tab  where (:beg_snap <= tab.snap_id and         tab.s
     
    SQL> set long 10 
    SQL> select sql_fulltext from v$sqlarea where rownum = 1;
     
    SQL_FULLTE
    ----------
    delete fro

  7. #7
    Membre averti Avatar de blackstreet
    Inscrit en
    Avril 2004
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 304
    Points : 335
    Points
    335
    Par défaut
    Re salut,

    En faites, j'ai un script (SCRIPT_SQL_TO_FILE) qui exécute la requete SQL, récupére la sortie et la stoque dans un fichier, ensuite ils exécute le fichier comme un script SCRIPT_SQL_PLUS.

    Donc à votre avis, je dois mettre dans le SCRIPT_SQL_TO_FILE un SET LONG 15000 par exemple et ça devrais marcher???

    et merci.

  8. #8
    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
    Points : 3 199
    Points
    3 199
    Par défaut
    Comme vous ne nous avez toujours pas dit quel est votre contexte (Unix ? Windows ? version ? enchainement des processus ? outils utilisés ? ...)....

    De plus, qu'est-ce qui vous empêche de faire le test ?

  9. #9
    Membre averti Avatar de blackstreet
    Inscrit en
    Avril 2004
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 304
    Points : 335
    Points
    335
    Par défaut
    Salut,

    Désolé, je vais donner plus de détail:

    en faites, je dois attendre lundi pour pouvoir tester, car mon serveur es au boulot.

    je travaille sur un serveur AIX 5.1, avec ORACLE 9.2.0,

    Voici mon enchainement :

    1- Je stoque une requete SQL PLUS dans la tables des REQUETES, qui est une table qu'on utilise pour stoquer les états qui vont être imprimer ensuite.
    2- Je lance mon script qui prend comme paramètres l'ID de la requete suivants le nom de l'état qu'elle va générer (par exemple facturation) et qui exécute un select pour extraire la requete et la stoquer dans un fichier .SQL.
    3- Un autre script exécute ce script SQL et génére le résultat et le rédérige vers un logiciel qui va s'occuper de la mise en page et l'impression.

    et sitout.

    C'est ça mon besoin.

    et merci

  10. #10
    Membre averti Avatar de blackstreet
    Inscrit en
    Avril 2004
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 304
    Points : 335
    Points
    335
    Par défaut [Résolu]
    Merci pour le coup de main, mon problème est résolu, et tou va pour le mieu, ma table contient maintenant des millier et des millier d'enregistrement.

    vraiment merci.

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

Discussions similaires

  1. Utilisation des types de données bit dans SQL Server
    Par yanal dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/05/2008, 14h19
  2. [PEAR][SOAP] Support des types de données complexes
    Par elendil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/12/2007, 10h58
  3. Format des type de données
    Par caballero dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 09/07/2007, 17h58
  4. taille disque pour type de donnée char (vide)
    Par aeled dans le forum Oracle
    Réponses: 8
    Dernier message: 16/08/2006, 11h46
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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