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 :

[PL/SQL] : Problème avec CLOB


Sujet :

Oracle

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut [PL/SQL] : Problème avec CLOB
    Bonjour,

    j'ai créé une table contenant un champ de type CLOB de manière à pouvoir insérer de très long texte.
    Lorsque j'essaie d'insérer un nouvel enregistrement dans la table, l'Exception suivante apparaît :

    System.Data.OracleClient.OracleException: ORA-01704: constante de chaîne trop longue

    Savez pourquoi je suis limité alors que j'utilise un CLOB ?

    Merci et bonne journée.

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Bonjour,

    Peux-tu commencer par nous donner ta version d'oracle, l'outil utilisé (cf. règles du forum) ainsi que le code ? Cela nous évitera de jouer aux devinettes.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    je suis désolé, j'essaierai d'être plus précis la prochaine fois

    La version Oracle est 9.i
    Le code 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
    CREATE TABLE demandes
    (
    	id_demande NUMBER(10),
    	logincre CHAR(8) NOT NULL,
    	loginclo CHAR(8),
    	dateclo DATE,
    	loginrej CHAR(8),
    	daterej DATE,
    	motifrej CLOB,
    	loginsup CHAR(8),
    	datesup DATE,
    	id_etat NUMBER(10) NOT NULL,
    	CONSTRAINT PK_demandes PRIMARY KEY (id_demande),
    	CONSTRAINT FK_demandes FOREIGN KEY (id_etat)
    	REFERENCES etats(id_etat),	
    );
     
     
    UPDATE demandes SET
    	loginrej ='dcollart',
    	daterej = SYSDATE,
    	motifrej = 'aaaaaaa....  plus de 2000 caractères   .....aaaaaaaaa',
    	id_etat = 5
    WHERE id_demande = 28;
    Merci et bonne journée.

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Cela vient du fait qu'oracle considère que la chaîne entre côte est du varchar2, donc limité à 4000 caractères.

    D'où récupères-tu cette valeur ? D'un fichier ?

  5. #5
    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
    Effectivement, aucune "constante" ne peut dépasser 4000 caractères.

    Soit vous alimentez votre CLOB par plusieurs update successifs, soit vous utilisez le package DBMS_LOB.

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 175
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    merci pour ces précisions. Je crois que la solution la plus propre est l'utilisation du package DBMS_LOB plutôt que l'utilisation d'une succession de requêtes. Malheureusement je ne parviens pas à trouver d'exemple illustrant un UPDATE avec ce package.

    Pouvez-vous m'aider ?

    Merci et bonne journée.

  7. #7
    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
    La fonction DMBS_LOB.APPEND() devrait faire l'affaire.
    http://sheikyerbouti.developpez.com/...e=Chap9#L9.2.1

    Le CLOB source pouvant être qu'une simple variable CLOB déclarée dans un bloc PL/SQL.

Discussions similaires

  1. [ACCESS][SQL] Problème avec requete SQL ...
    Par mpascolo dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/11/2005, 10h54
  2. [SQL]Problème avec ADO - Order by
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/11/2005, 10h55
  3. [T-SQL] problème avec un trigger
    Par karine77 dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 26/09/2005, 10h45
  4. Access/SQL : Problème avec Count
    Par Taurëndil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2005, 15h49
  5. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18

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