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

SQL Oracle Discussion :

Manipulation des champs CLOB


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 104
    Points : 40
    Points
    40
    Par défaut Manipulation des champs CLOB
    Bonjour à tous,

    je viens d'écrire une procédure stockée en utilisant une varibale du type CLOB.

    le but de cette procédure est de parcourir un curseur et de conactener à chaque itération de la boucle la variable avec une chaine des caractéres (la taille de concatination pourra depasse le 3Mega).

    le problème est le suivant: chaque fois j'execute cette procédure, la table space temporaire sera saturée et l'execution s'arrête.

    est ce qu'il y a un moyen pour rendre le traitement plus rapide et que la table space temporaire reste a son état?

    Merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pas trop d'idées, mais en PL/SQL tu peux utiliser du VARCHAR2(32767). Tu pourrais insérer dans cette variable temporaire et de n'insérer dans le CLOB que quand c'est plein.

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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
    DECLARE
    CURSOR c IS 
    	SELECT nom, adr1
    	FROM fclient
    	WHERE ROWNUM < 10000;
    	v_clob CLOB;
    	v_temp VARCHAR2(30000);
    	i NUMBER :=0;
    BEGIN
    	dbms_output.put_line('DEB1 ' || TO_CHAR(SYSDATE, 'HH24:MI:SS'));
    	FOR r IN c 
    	LOOP
    		IF LENGTH(v_temp || r.nom || r.adr1) > 30000
    		THEN
    			v_clob := v_clob || v_temp;
    			v_temp :=  r.nom || r.adr1;
    			i := i + 1;
    		ELSE
    			v_temp := v_temp || r.nom || r.adr1;
    		END IF;	
    	END LOOP;
    	i := i + 1;
    	v_clob := v_clob || v_temp;
    	dbms_output.put_line('FIN1 nbMajClob(' || i || ') ' || TO_CHAR(SYSDATE, 'HH24:MI:SS') || ' Taillefinale:' || dbms_lob.getLENGTH(v_clob));
     
    	v_clob := '';
    	i:=0;
    	dbms_output.put_line('DEB2 ' || TO_CHAR(SYSDATE, 'HH24:MI:SS'));
    	FOR r IN c 
    	LOOP
    		i := i + 1;
    		v_clob := v_clob || r.nom || r.adr1;
    	END LOOP;
    	dbms_output.put_line('FIN2 nbMajClob(' || i || ') ' || TO_CHAR(SYSDATE, 'HH24:MI:SS') || ' Taillefinale:' || dbms_lob.getLENGTH(v_clob));
     
    END;
    Le résultat est flagrant
    DEB1 11:48:05
    FIN1 nbMajClob(12) 11:48:05 Taillefinale:351658

    DEB2 11:48:05
    FIN2 nbMajClob(9999) 11:48:28 Taillefinale:351658
    1s pour le premier, 23s pour le second

Discussions similaires

  1. Champ XAML : manipulation des éléments, et événements
    Par Hibernatus34 dans le forum WinDev
    Réponses: 3
    Dernier message: 12/01/2015, 16h01
  2. Réponses: 3
    Dernier message: 02/05/2011, 12h53
  3. [WD15] Manipuler des chaine RTF dans un Champs saisie
    Par shemonet dans le forum WinDev
    Réponses: 3
    Dernier message: 10/02/2011, 15h23
  4. Manipuler des champs CLOB Oracle en C
    Par Agfa21 dans le forum C
    Réponses: 1
    Dernier message: 17/04/2009, 10h39
  5. opération sur des champs déjà manipulés
    Par fred23195 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 23/08/2006, 16h16

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