Bonjour,
J'ai 5 variables (V_1, V_2 .... V_5) et je veux à l'aide d'une fonction les trier du plus grand au plus petit .
Merci
Version imprimable
Bonjour,
J'ai 5 variables (V_1, V_2 .... V_5) et je veux à l'aide d'une fonction les trier du plus grand au plus petit .
Merci
Il devrait suffir d'utiliser une collection INDEX BY pour cela.
Puvez-vous donner un example concret ?
Voici mon cas réel :Citation:
Envoyé par SheikYerbouti
J'ai une table
dem (
old_1 varchar2(10),
old_2 varchar2(10),
old_3 varchar2(10),
old_4 varchar2(10),
old_5 varchar2(10)
)
je veux dans un trigger "avant-insert" classer les valeurs inserées dans les champs old_1, old_2, old_3, old_4, old_5 du plus grand au plus petit.
SQL> insert into dem(old_1, old_2, old_3, old_4, old_5) values (2,4,1,3,5);
1 row inserted
SQL> select * from dem;
old_1....old_2....old_3....old_4....old_5
.....5.........4..........3.........2..........1
1 rows selected
Merci.
Moi je ferais quelque chose du genre :
dans un trigger before insert.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 ... CURSOR c_val IS SELECT valeur FROM (SELECT :old.old_1 valeur FROM dual UNION SELECT :old.old_2 valeur FROM dual UNION SELECT :old.old_3 valeur FROM dual UNION SELECT :old.old_4 valeur FROM dual UNION SELECT :old.old_5 valeur FROM dual) ORDER BY valeur desc; TYPE list IS TABLE OF VARCHAR2 INDEX BY BINARY_INTEGER; tab list; i NUMBER := 0; BEGIN FOR r_val IN c_val LOOP i := i + 1; tab(i) := r_val.valeur; END LOOP; :new.old_1 := tab(1); :new.old_2 := tab(2); :new.old_3 := tab(3); :new.old_4 := tab(4); :new.old_5 := tab(5); END;
Mille excuses si quelques erreurs de syntaxe.
Vous pouvez utiliser un curseur sur la requête suivante:
Code:
1
2 SELECT * FROM TABLE(sys.dbms_debug_vc2coll('1','5','2')) ORDER BY 1 DESC
"UNION ALL" peut etre pour gérer le cas ou 2 valeurs sont identiques...