Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 12/08/2011, 15h40   #1
Invité de passage
 
Homme
Analyste d'exploitation
Inscription : décembre 2004
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Distribution

Informations forums :
Inscription : décembre 2004
Messages : 10
Points : 4
Points : 4
Par défaut Manipuler des chaines de caractères

Bonjour,

J'ai une question ou plutôt un souci que je n'arrive pas a résoudre et j'aurais souhaité un peu d'aide car je ne m'en sors pas.

Je m'explique:

Dans une table j'ai 8 chaines de caractères, toutes dans la même colonne mais avec des identifiants différents, voici les chaines:

chaine1 : "Ce compresseur 12V se branche sur l'allume-cigare et permet "
chaine2 : "de regonfler n'importe où les pneus, ballons, accessoires pn"
chaine3 : "eumatiques etc... grâce à ses trois embouts fournis.<br /><u"
chaine4 : "l><li>Pression maximale : 250 PSI. 17 bars.</li><li>Alimenta"
chaine5 : "tion : 12 Continu.</li><li>Diamètre du cylindre : 16 mm.</li"
chaine6 : "><li>Accessoires fournis : aiguille pour gonfler les ballons"
chaine7 : " et 2 adaptateurs.</li><li>Dimensions : 163x88x123mm.</li><l"
chaine8 : "i>Poids : 0.4kg.</li><li>Agrément CE/RoHS</li></ul> "


Toutes ces chaines assemblées forment un texte, en l’occurrence la description d'un produit (mais ce n'est pas ce qui nous intéresse)

Comme on peut le voir, ces chaines sont composées de balise HTML car elles sont également affichées dans un site web. Mais mon souci c'est qu'il faut que je les affiche dans une édition qui utilise du SQL. Et surtout que je les formate comme dans la page web.
A savoir que dans mon logiciel d'édition je peux mettre le résultat d'une requête dans une variable.

En fait il faudrait que je me retrouve avec ce résultat là:

Ce compresseur 12V se branche sur l'allume-cigare et permet de regonfler n'importe où les pneus, ballons, accessoires pneumatiques etc... grâce à ses trois embouts fournis.
Pression maximale : 250 PSI. 17 bars.
Alimentation : 12 Continu.
Diamètre du cylindre : 16 mm.
Accessoires fournis : aiguille pour gonfler les ballons et 2 adaptateurs.
Dimensions : 163x88x123mm.
Poids : 0.4kg.
Agrément CE/RoHS


Donc en fait je pensais utiliser les balises HTML de mes chaines pour les formater en SQL et les insérer dans des variables pour pouvoir les afficher comme ci-dessus.

Je me bataille avec des substr, des replace, des instr et autres depuis plusieurs jours mais je ne trouve pas de solutions viables. Et donc c'est pour cela que je poste sur ce forum en espérant que vous pourriez m'éclairez.

Je ne suis peut être pas très clair dans mes explications, au besoin n'hésitez en m'en demander plus.

merci d'avance pour votre aide.
niuniuk36 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 00h57   #2
Membre confirmé
 
Inscription : mai 2006
Messages : 179
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 179
Points : 211
Points : 211
Bonjour,

Si vous êtes en 10g+, vous pouvez jouer avec les expressions rationnelles.

http://download.oracle.com/docs/cd/B...nctions130.htm
Drawingrom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 13h45   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Une 1ere piste :
Code :
1
2
3
4
5
6
WITH t AS (
  SELECT prod_id, LISTAGG(description, '') WITHIN GROUP (ORDER BY chaine_ordre) AS total_desc
    FROM desc_prod
   GROUP BY prod_id
)
SELECT regexp_replace(REPLACE(total_desc,'<li>',chr(10)),'<[^<]*?>','') AS total_desc FROM t
A noter que :
- j'ai utilisé listagg pour concaténer les lignes, regarde String Aggregation Techniques si ta version d'oracle est inférieure à 11GR2.
- je n'ai remplacé que les balises <li> en retour chariot car d'après l'exemple c'était suffisant mais il sera peut être pertinant de modifier aussi d'autres balises comme <p> ou <br />...
- J'ai pompé l'expression régulière sur internet, je ne sais pas si c'est ce qu'il y a de plus optimisé car je ne suis pas très compétent en la matière.
Ci dessous le jeu de test :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
SQL> CREATE TABLE desc_prod (prod_id integer,chaine_ordre integer,description varchar2(100))
  2  /
 
TABLE created.
 
SQL> var v varchar2(100);
SQL> exec :v := q'[Ce compresseur 12V se branche sur l'allume-cigare et permet ]';
 
PL/SQL procedure successfully completed.
 
SQL> insert into desc_prod values (1,1,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[de regonfler n'importe où les pneus, ballons, accessoires pn]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,2,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[eumatiques etc... grâce à ses trois embouts fournis.<br /><u]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,3,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[l><li>Pression maximale : 250 PSI. 17 bars.</li><li>Alimenta]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,4,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[tion : 12 Continu.</li><li>Diamètre du cylindre : 16 mm.</li]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,5,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[><li>Accessoires fournis : aiguille pour gonfler les ballons]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,6,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[ et 2 adaptateurs.</li><li>Dimensions : 163x88x123mm.</li><l]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,7,:v)
  2  /
 
1 row created.
 
SQL> exec :v := q'[i>Poids : 0.4kg.</li><li>Agrément CE/RoHS</li></ul> ]';
 
PL/SQL procedure successfully completed.
 
SQL> INSERT INTO desc_prod VALUES (1,8,:v)
  2  /
 
1 row created.
 
SQL> commit
  2  /
 
Commit complete.
 
SQL> 
SQL> WITH t AS (
  2    SELECT prod_id, LISTAGG(description, '') WITHIN GROUP (ORDER BY chaine_ordre) AS total_desc
  3      FROM desc_prod
  4     GROUP BY prod_id
  5  )
  6  SELECT regexp_replace(REPLACE(total_desc,'<li>',chr(10)),'<[^<]*?>','') AS total_desc FROM t
  7  /
 
TOTAL_DESC
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ce compresseur 12V se branche sur l'allume-cigare et permet de regonfler n'importe où les pneus, ballons, accessoires pneumatiques etc... grâce à ses trois embouts fournis.
Pression maximale : 250 PSI. 17 bars.
Alimentation : 12 Continu.
Diamètre du cylindre : 16 mm.
Accessoires fournis : aiguille pour gonfler les ballons et 2 adaptateurs.
Dimensions : 163x88x123mm.
Poids : 0.4kg.
Agrément CE/RoHS
 
 
SQL>
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 08h40   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
xml + stylesheet...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 12h31   #5
Invité de passage
 
Homme
Analyste d'exploitation
Inscription : décembre 2004
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Analyste d'exploitation
Secteur : Distribution

Informations forums :
Inscription : décembre 2004
Messages : 10
Points : 4
Points : 4
Bonjour et merci pour vos réponses.

Je vais tester cela et je vous dirais si ça fonctionne avec mon logiciels d'éditions.

Je vous tiens au courant , merci encore.
niuniuk36 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 15h37.


 
 
 
 
Partenaires

Hébergement Web