..*/
Version imprimable
..*/
Est-ce que tu ne cherches pas à recréer la fonction LISTAGG ?
je ne sais pas a quoi sert cette fonction, je suis entrain d'apprendre le langage malheuresement :/
si je devais utilisé cette fonction cela aurais donnée quoi ?
il faut savoir que je dois comprarer a chaque fois les id (si c'est le même, on recupere juste son nombre et on le met à la suite des autres nombre (si il y en a) dans la colonne nombre de la table resultat séparé des virgules
La requête suivante devrait retourner ma liste que tu attends :
Code:
1
2
3
4
5
6 SELECT MIN(id) AS id , user_name , LISTAGG(nombre, ';') WITHIN GROUP (ORDER BY nombre) FROM stockage GROUP BY user_name ORDER BY id
merci, celle ci marche effectivement mais si je dois remplir la table resultat avec les données de la table delta etant donné qu'elle est vide tout en utilisant le meme principe de si il y a 2 id qui sont pareil on recupere juste son nombre et on le rajoute l'un apres l'autre .. (du genre au depart ma table resultat et vide, je vais dans la table delta je recupere une donne je l'insere dans la table resultat, 2e fois je vais et je vois que c'est le meme idee que celle d'avant, a ce moment la je recupere juste son nombre au lieu de réecrire les informations de l'id qu'on a) et si c'est un id different de celle qu'on a dans la table resultat on insere tout simplement. il faut quel requête pour ça ?
Regarde ce que peut faire pour toi la commande MERGE...
Merci, Je me suis documenter pour le MERGE et comme requette j'ai :
et j'ai comme erreur :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT MIN(id) AS id , user_name , LISTAGG(nombre, ';') WITHIN GROUP (ORDER BY nombre) FROM delta GROUP BY user_name ORDER BY id; MERGE INTO delta e USING resultat ne ON ( e.id = ne.id or ne is empty ) WHEN NOT MATCHED THEN INSERT (e.id, e.user_name, e.nombre) VALUES (ne.id,ne.user_name,ne.nombre);
Help pleaseCitation:
Error at Command Line : 10 Column : 21
Error report -
SQL Error: ORA-00904: "NE": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Je ne vois pas très bien ce que vous essayez d'accomplir. Voilà juste un exemple pour mettre vos numéros dans un Varray à partir des données opérationnelles. Il est toute à fait possible que créer juste une vue pour cela pourriez vous suffire.
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 Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 SQL> SQL> Drop table t_tab 2 / Table dropped SQL> Create table t_tab ( 2 id int primary key, 3 user_name varchar2(10) not null, 4 nombre int 5 ) 6 / Table created SQL> Insert All 2 Into t_tab values (1,'bibi',5) 3 Into t_tab values (2,'roger',6) 4 Into t_tab values (3,'bibi', 7) 5 Into t_tab values (4,'julion', 3) 6 Into t_tab values (5,'bibi',12) 7 Select * 8 From dual 9 / 5 rows inserted SQL> Commit 2 / Commit complete SQL> Create Or replace Type my_va20 As Varray(10) Of Number(10) 2 / Type created SQL> Select user_name, 2 cast(collect(nombre order by id) as my_va20) Tableau 3 From t_tab 4 Group By user_name 5 / USER_NAME TABLEAU ---------- ------- bibi <Object julion <Object roger <Object SQL>