Bonjour,
Je déplace mon dernier post qui situé dans un thread "resolu", n'a surement pas la visibilité nécessaire, en espérant que les modérateurs ne m'en veuillent pas.
C'est donc la suite corrigée et commentée de : http://www.developpez.net/forums/showthread.php?t=65198
---------------------------------------------------------
J'ai une table 'table' avec deux champs 'id' et 'num' qui contient des chaines du type :
Je veux comme résultat final dans une autre table 'result' avec comme pour sequence, l'ordre d'afichage des valeurs de num pour chaque id
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 create table test (id number, num varchar2(255)); insert into test values (1,'12,12345, A345, TOTO'); insert into test values (2,'454'); insert into test values (3,'13,454');
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 id num sequence 1 12 1 1 12345 2 1 A345 3 1 TOTO 4 2 454 1 3 13 1 3 454 2
En lisant le thread d'origine, je suis arrivé à des premiers résultats intéressants avec la requête suivante :
1 - est ce possible de la simplifier ?
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 Drop table result; Create table result (id number , num varchar2(50), seq number); insert into result (id, num) select id, trim(substr(num, instr(num,',',1,rr.r)+1, instr(num,',',1,rr.r+1)-instr(num,',',1,rr.r)-1 )) AS num from (select id, ','||num||',' AS num, length(num)-length(replace(num,',',''))+1 AS cnt from test ) test, (select rownum r from all_objects) rr where rr.r <= test.cnt ; select id, num from result;
2 - l'ordre d'insertion n'est pas le bon non plus mais quand le champ séquence sera rempli cela ne posera pas de problème
3 - comment incrémenter/remplir le champ séquence ?
Est-ce jouable en SQL seul ou faut-il du PL/SQL ?
La deuxième partie du pb consiste à ne pas inserer certaines valeurs. Par exemple comment créer une liste de valeur qui ne doivent pas être inséré dans la table : par exemple si je ne veux pas intégrer les valeurs 12 et 13 voici ce que je voudrais obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 id, num, sequence 1 12345 1 1 A345 2 1 TOTO 3 2 454 1 3 454 1
Il ya une troisième partie mais je vais m'arrêter ici.
Merci pour votre aide
Partager