Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2007, 14h38   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 5
Points : 0
Points : 0
Par défaut Problème avec des espaces présents en début de chaine

Bonjour,

Je dois insérer dans un champ une chaine de caractère stockée dans une autre table.

Pour des raisons d'affichage, cette chaine commence par 5 espaces.

Pour transfèrer les données d'une table vers une autre j'utilise une procédure stockée dont j'ai extrait la partie suivante concernant mes deux tables :

Code :
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
/* Table TMP_DETAIL_REALISATIONS */
DECLARE  CURSOR DETAILCur IS
         SELECT * FROM TMP_DETAIL_REALISATIONS;
         tmp_detail TMP_DETAIL_REALISATIONS%ROWTYPE;
begin
       open DETAILCur;
       loop
            fetch DETAILCur into tmp_detail;
            EXIT WHEN DETAILCur%NOTFOUND;
            VarIdChallenge :=0;
            VarNumChallenge := tmp_detail.numchallenge;
            VarMarque := tmp_detail.codemarque;

            open IDChallenge(VarNumChallenge,  VarMarque);
            fetch IDChallenge into VarIdChallenge;
            close IDCHALLENGE;
            
            /* insertion de la ligne des titres */
            if tmp_detail.NUMLIGNE = '0001' or tmp_detail.NUMLIGNE = '0002' then
                  insert into DETAILREALISATIONS
                  (IDCHALLENGE, NUMREGROUPEMENT, INFODETAILREALISATION, NUMLIGNE)
                  values
                  (VarIdChallenge, '0', CHAR(tmp_detail.INFORMATION), tmp_detail.NUMLIGNE);
            
            /* insertion des informations */
            else
                  insert into DETAILREALISATIONS
                  (IDCHALLENGE, NUMREGROUPEMENT, INFODETAILREALISATION, NUMLIGNE)
                  values
                  (VarIdChallenge, tmp_detail.NUMCONTRATREGROUPEMENT, tmp_detail.INFORMATION, tmp_detail.NUMLIGNE);
                  
            end if;
            
       end loop;
       close DETAILCur;
end;
Quand j'exécute ma procédure stockée j'ai les 5 espaces du début de ma chaine qui sont supprimés !

Est-ce qu'une âme charitable aurait une idée pour faire en sorte que je puisse conserver mes espaces en début de chaine ?

Merci pour votre aide...
tgarcia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h47   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

As tu lu les règles du forum ? Pas de version d'oracle ?

Tu devrais utiliser la balise code, ce serais beaucoup plus clair pour tout le monde.

Quelle est le format de la variable qui pose problème VARCHAR, VARCHAR2, CHAR ?
quelle est la variable qui pose problème ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h47   #3
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Bonjour ,

la taille de ta chaine est fixe ?

essaie ça
Code :
1
2
 
 lpad(NomChaine,lataille de la chaine,' ')
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 14h55   #4
Invité de passage
 
Inscription : novembre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 5
Points : 0
Points : 0
Tout d'abord merci pour votre réponse.
Désolé pour l'oubli de la version d 'oracle. C'est la version 9

Voic le code mis en forme correctement :

Code :
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
/* Table TMP_DETAIL_REALISATIONS */
DECLARE  CURSOR DETAILCur IS
         SELECT * FROM TMP_DETAIL_REALISATIONS;
         tmp_detail TMP_DETAIL_REALISATIONS%ROWTYPE;
begin
       open DETAILCur;
       loop
            fetch DETAILCur into tmp_detail;
            EXIT WHEN DETAILCur%NOTFOUND;
            VarIdChallenge :=0;
            VarNumChallenge := tmp_detail.numchallenge;
            VarMarque := tmp_detail.codemarque;

            open IDChallenge(VarNumChallenge,  VarMarque);
            fetch IDChallenge into VarIdChallenge;
            close IDCHALLENGE;
            
            /* insertion de la ligne des titres */
            if tmp_detail.NUMLIGNE = '0001' or tmp_detail.NUMLIGNE = '0002' then
                  insert into DETAILREALISATIONS
                  (IDCHALLENGE, NUMREGROUPEMENT, INFODETAILREALISATION, NUMLIGNE)
                  values
                  (VarIdChallenge, '0', tmp_detail.INFORMATION, tmp_detail.NUMLIGNE);            
            /* insertion des informations */
            else
                  insert into DETAILREALISATIONS
                  (IDCHALLENGE, NUMREGROUPEMENT, INFODETAILREALISATION, NUMLIGNE)
                  values
                  (VarIdChallenge, tmp_detail.NUMCONTRATREGROUPEMENT, tmp_detail.INFORMATION, tmp_detail.NUMLIGNE);
                  
            end if;
            
       end loop;
       close DETAILCur;
end;
Ce qui pose problème c'est au niveau du code en rouge.
Le type du champ qui pose problème est VARCHAR2.
La variable qui pose problème est "tmp_detail.INFORMATION".

Mercio pour votre aide.
tgarcia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 15h06   #5
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Bonjour,

quand tu consultes la table tu vois les 5 espaces
Code :
1
2
 
SELECT * FROM TMP_DETAIL_REALISATIONS;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 15h10   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
la colonne de destination ne serait pas en NUMBER par hasard ? Sinon, stocker des espaces rien que pour l'affichage c'est vraiment n'importe quoi... m'enfin
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 15h25   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Donne le desc des 2 tables.
Pour info c'est quoi comme curseur IDChallenge ?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h18.


 
 
 
 
Partenaires

Hébergement Web