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 :

Utilisation d'un Clob


Sujet :

Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 88
    Points
    88
    Par défaut Utilisation d'un Clob
    Hello,

    Je travaille sur Oracle Database Express Edition.

    Je souhaite enregistrer un texte très long, supérieur à 4000 caractères. On m'a donc conseille le Clob, qui est capable d'enregistrer de grandes quantités de données.

    Mon problème est le suivant :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    insert into fiches values (2,'println "test fiche 2"
    String output1 = "";
    String output2 = "";
    if (calcaire_total >50
    & (texture == "sable argileux" || texture == "limon argileux" || texture == "argile" || texture == "limon argilo-sableux")
    & dose_refus > 200
    & nature == "craie"
    & apparition == "< 30"
    & obstacle == "< 30"){
    println "fiche 2 validee"
    output1="La présence d`un substrat calcaire à très faible profondeur conditionne le fonctionnement général du sol.\n";
    if (qtte_MO == "moyen" || qtte_MO == "eleve" || qtte_MO == "tres eleve" || qtte_MO == "sature"){
    if (dose_argile > 250) {
    output1=output1+"L’argile et la matière organique associée à une teneur élevée en calcaire conduit à la formation d’une bonne structure (polyédrique fine à grumeleuse).\n"
    }
    else{ output1=output1+"Malgré le niveau satisfaisant des réserves organiques et le bilan calcique excédentaire, la terre jouit d’une stabilité structurale très moyenne. Une fragilité des agrégats et quelques phénomènes de battance sont à craindre.\n";
    }}
    else {
    if (dose_argile > 250){
    output1=output1+"La richesse argileuse et le bilan calcique excédentaire ne suffisent pas à assurer une forte stabilité structurale. Les agrégats sont souvent fragiles. Une battance superficielle peut se manifester.\n"
    if (sol_pente == true){output1=output1+"Sur cette parcelle, en position de versant, des phénomènes d’érosion sont possibles en cas d’averse violente sur sol insuffisamment couvert.\n";
    }}
    else{
    output1=output1+"Le sol présente une stabilité structurale souvent médiocre.\n"
    if (sol_pente == true){output1=output1+"Compte tenu de la topographie de la parcelle (pente) et de la fragilité des agrégats, des phénomènes d’érosion sont probables, notamment sur sol insuffisamment couvert lors d’averses violentes.\n"
    }}}
    output1=output1+"En l’absence de fissures dans la roche dure, la profondeur d’enracinement est très limitée. En raison de la faible épaisseur de sol prospectée, les réserves hydriques sont faibles, mais le ressuyage est rapide.\n"
    if (cailloux == true || dose_refus > 200){output1=output1+"Quoique ralenti par la pierrosité, la terre se réchauffe bien et s’avère assez précoce."
    }
    if (sol_irrigue == true){output2="Grâce à la mise en oeuvre d’une irrigation, ce sol offre de bonnes potentialités. Eviter ou proscrire les cultures ne supportant pas le calcaire.\n"
    }
    else { output2="Pour une utilisation optimale, ce type de sol mérite d’être irrigué. Eviter ou proscrire les cultures ne supportant pas le calcaire.\n"
    }
    if (dose_argile < 250){output2=output2+"Un béchage ou un labour d’automne ou d’hiver sont déconseillés. Préférer une intervention en début de printemps.\n"
    if (cailloux == true || dose_refus > 200 & dose_argile < 300){output2=output2+"La pierrosité peut être gênante pour la préparation du sol et les semis (risques de blocage des outils et de levée irrégulière).\n"
    }
    else if (cailloux == true || dose_refus > 200 & dose_argile > 300){output2=output2+"La pierrosité peut être gênante pour ces dernières interventions (risques de blocage des outils et de levée irrégulière).\n"
    }}
    else {if (dose_argile > 300){output2=output2+"Compte tenu de la teneur en argile, un bêchage ou un labour d’automne ou d’hiver sont intéressants pour bénéficier d’une structuration sous l’action du climat (alternances: gel / dégel, humectation / dessiccation). Un roulage ou un léger tassement pourraient être nécessaires après préparation du sol ou semis.\n"
    if (cailloux == true || dose_refus > 200 & dose_argile < 300){output2=output2+"La pierrosité peut être gênante pour la préparation du sol et les semis (risques de blocage des outils et de levée irrégulière).\n"
    }
    else if (cailloux == true || dose_refus > 200 & dose_argile > 300){output2=output2+"La pierrosité peut être gênante pour ces dernières interventions (risques de blocage des outils et de levée irrégulière).\n"
    }}
    else{output2=output2+"Le bêchage ou le labour dressé d’automne sont intéressants pour favoriser une structuration de surface sous l’action du climat (alternances: gel / dégel, humectation / dessiccation).\n"        
    }}}
    else {output2 = "fiche non validee"}
    out=output1+"XXX"+output2;
    return out;');
    Losque je lance cette requête SQL dans l'interface d'oracle, soit il m'affiche une pop-up nommée "Enter bind variables" http://127.0.0.1:8080/apex/f?p=4500:...56226810391::: dans laquelle il n'y a qu'un bouton "Submit", soit il me dit que j'ai dépassé la taille autorisée avec le code d'erreur correspondant à celui qui s'affiche quand on met plus de 4000 caractères dans un varchar.

    Quelqu'un connait le motif de l'apparition de la pop-up ?
    Et sinon, comment insérer un texte plus gros que 4000 caractères ?

    Pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into fiches values (1,'println "test fiche 1" String output1=""; String output2=""; if (calcaire_total >50 & texture == "sable argileux" & dose_refus < 200 & nature == "craie" & apparition == "< 30" & obstacle == "> 90 ou pas d`obstacle"){ println "fiche 1 validee" output1="La présence d`un substrat calcaire à très faible profondeur conditionne le fonctionnement général du sol."; if (qtte_MO == "moyen"){ output1=output1+"La teneur actuelle en matières organiques associée à la présence de calcaire conduisent à l`obtention d’une bonne structure. Toutefois une pluviométrie d’intensité élevée pourrait déstructurer certains agrégats."} output1=output1+"Sauf en cas de substrat calcaire tendre, la profondeur d`enracinement est très limitée, quoique irrégulière compte-tenu de la présence éventuelle de fissures. Le sol est en général très perméable et dispose d`une faible réserve en eau utile. Cependant, celle-ci peut-être compensée par l`exploration racinaire des zones fissurées ou remaniées. \n" if (calc_actif > 50) { output2 = "La présence de calcaire actif peut provoquer un blocage plus ou moins important du phosphore et/ou du fer, d`où des carences ou des déficiences en ces éléments."} output2=output2+"Dans ce type de sol, peu profond et perméable, le lessivage de l`azote et des engrais est important. En raison des risques de pollution des nappes phréatiques et des cours d`eau, éviter l`épandage d`effluents liquides (lisiers, boues,…). Sous réserve de ne choisir que des espèces calcicoles ou indifférentes, et d`assurer une irrigation régulière, ce sol doit offrir de bonnes potentialités." } else output2="fiche non validee"; out=output1+"XXX"+output2; return out;');
    Ce code ci a parfaitement fonctionné. Après je ne sais pas si ce sont les retours à la ligne qui ont tout cassé.


    Edit : Ah, je viens de tenter de l'exécuter dans la ligne de commande sql, en fait je crois qu'il cherche à exécuter le code en lui-même, il me demande une valeur pour texture, puis pour dose_refus, etc... Je veux que ça soit du texte moi !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est parce que le & est utilisé par certains outils clients (TOAD, SQL-Developper, peut-être SQL*Plus aussi) comme un marqueur permettant de référencer une variable de substitution.

    Donc rassurez-vous, pas de tentative d'exécution du code à l'intérieur.
    Vous pouvez simplement rajouter avant votre insert la commande :
    Ce qui m'étonne c'est que votre insert sans retour chariot passe tranquillement.

Discussions similaires

  1. Utilisation d'un Clob en Cobol
    Par Macmini95 dans le forum Cobol
    Réponses: 4
    Dernier message: 23/12/2012, 22h54
  2. [DB2 V8 / zOS / PL1] Utilisation d'un CLOB
    Par Pico----- dans le forum DB2
    Réponses: 2
    Dernier message: 17/01/2012, 11h17
  3. Découper CLOB pour utiliser CLIENT_TEXT_IO.PUT
    Par bigmyc dans le forum PL/SQL
    Réponses: 1
    Dernier message: 17/05/2011, 16h15
  4. Utiliser un CLOB comme champ texte ?
    Par tostinni dans le forum SQL
    Réponses: 7
    Dernier message: 27/08/2008, 22h00
  5. Oracle 9i : Requête utilisant un clob et union
    Par zambi dans le forum Oracle
    Réponses: 6
    Dernier message: 10/04/2006, 21h17

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