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 23/06/2011, 16h46   #1
Futur Membre du Club
 
Homme seb
Consultant informatique
Inscription : février 2008
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme seb
Âge : 33
Localisation : France, Haute Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : février 2008
Messages : 34
Points : 16
Points : 16
Par défaut oracle split varchar

Bonjour,

Version oracle:
Code :
1
2
3
4
5
6
 
Oracle DATABASE 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE	10.2.0.3.0	Production
TNS FOR IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Productio
NLSRTL Version 10.2.0.3.0 - Production
J'ai une table du style

Code :
1
2
3
4
5
6
 
champ1 | champ 2
l1          |   x1,x2,x3
l2          |   x3,x4
l5          |   x5
l5          |   x1,x4,x6,x7
et je souhaiterais obtenir une vue

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
champ1 | champ 2
l1          |   x1
l1          |   x2
l1          |   x3
l2          |   x3
l2          |   x4
l5          |   x5
l5          |   x1
l5          |   x4
l5          |   x6
l5          |   x7
J'imagine qu'il faut utiliser une function de split ..

D'avance merci pour votre aide
pingouinos_64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 17h06   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 810
Points : 5 810
String to Rows
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 17h14   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Je pense qu'il te faut utilser Voici un lien traitant de ce sujet :
http://forums.oracle.com/forums/thre...hreadID=958898

ça doit donner un truc du genre, pas pu tester comme en ce moment je taf chez un client en 9i donc à confirmer :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
WITH TEST
AS
(
SELECT 'l1' AS ID    , 'x1,x2,x3' AS value   FROM dual UNION ALL
SELECT 'l2'          , 'x3,x4'               FROM dual UNION ALL
SELECT 'l1'          , 'x5'                  FROM dual UNION ALL
SELECT 'l1'          , 'x1,x4,x6,x7'         FROM dual 
)
    SELECT ID , REGEXP_SUBSTR (value , '[^,]+', 1, LEVEL) AS result    
    FROM   TEST    
    CONNECT BY LEVEL <= ( SELECT LENGTH (REPLACE (value , ',', NULL)) 
                                      FROM TEST)
;
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 12h46   #4
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Ca marche pas pour la bonne raison que la gruge du CONNECT BY level, tu ne peux l'utiliser que pour dupliquer une seule ligne.
A partir du moment où ta sélection initiale fait plus qu'une ligne, c'est mort.

En plus, ce que tu as mis derrière le CONNECT BY level fait planter la requête (c'est un SELECT non corrélé : ça renvoie pleins de lignes et non pas un seul nombre)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2011, 22h08   #5
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 autre méthode se rapprochant de Integer Series Generator Method dans le lien proposé par mnitu mais ne nécessitant aucune création de TYPE :
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
SQL> WITH t AS (
SELECT 'l1' AS c1, 'x1,x2,x3' AS c2 FROM dual union ALL
SELECT 'l2'      , 'x3,x4'          FROM dual union ALL
SELECT 'l5'      , 'x5'             FROM dual union ALL
SELECT 'l5'      , 'x1,x4,x6,x7'    FROM dual
)
SELECT t.c1, x.column_value AS list_c2
  FROM t
 CROSS JOIN TABLE(
              cast(multiset(
                       SELECT substr( ','||c2||',',
                                      instr( ','||c2||',', ',', 1, rownum )+1,
                                      instr( ','||c2||',', ',', 1, rownum+1 )
                                             -instr( ','||c2||',', ',', 1, rownum )-1
                                     )
                         FROM dual
                      connect BY level <= length(c2)-length(REPLACE(c2,',',''))+1
                            ) AS sys.odcivarchar2list )
                    ) x;
 
C1 LIST_
-- -----
l1 x1
l1 x2
l1 x3
l2 x3
l2 x4
l5 x5
l5 x1
l5 x4
l5 x6
l5 x7
 
10 rows selected.
 
SQL>
Merci Tom Kyte pour le bon timing du post (et pour tout le reste évidemment) :
sorting by number
skuatamad 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 01h37.


 
 
 
 
Partenaires

Hébergement Web