En ce qui concerne la performance, il est préférable d'utiliser l'instruction if-then-else ou la clause where ?
Merci pour votre reponse![]()
En ce qui concerne la performance, il est préférable d'utiliser l'instruction if-then-else ou la clause where ?
Merci pour votre reponse![]()
Ça dépend.
Bonjour,
Une clause where peut servir à filtrer des données lors de l'accès alors qu'une condition pl/sql va lire toutes les données pour les filtrer ensuite. Donc la réponse serait en faveur du where.
Cordialement,
Franck.
Je comprends que la clause where charge la mémoire avec les données filtrées tandis que l'instruction if-then else charge la mémoire avec toutes les données, c'est vrai?
Donc, le code suivant :
est meilleur que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select case when x > 3 then 'ok' else 'not ok' end action; for r in c loop update.. set.. where.. and r.action = 'ok'
Merci,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select case when x > 3 then 'ok' else 'not ok' end action; for r in c loop if r.action = 'ok' update.. set.. where..
blackangel
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 select case when x > 3 then 'ok' else 'not ok' end action; for r in c loop update.. set.. where.. and r.action = 'ok' est meilleure que : select case when x > 3 then 'ok' else 'not ok' end action; for r in c loop if r.action = 'ok' update.. set.. where..
Et dans ton deuxième cas tu mets quoi dans la clause WHERE à ton avis ???
J'ai pas l'impression que tu aies compris ta propre question !
La différence porte sur un exemple tel que :
Et celui-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 FOR i IN (SELECT col1, col2 FROM ma_table) LOOP IF (Col2 = 0) THEN UPDATE .. END IF;
Le 2eme sera plus performant car le nombre de lignes sélectionnées est conditionné par la clause WHERE, en résulte (normalement) un nombre de lignes moindre à traiter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 FOR i IN (SELECT col1, col2 FROM ma_table WHERE Col2 = 0) LOOP UPDATE ..
La situation exacte est le suivante :
j'ai créé une table log :
Je veux faire update sur la table_y en fonction de chaque cas ( et puis faire update sur log pour voir les cas traités avec succès ou échec).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 create table log as SELECT case when date > trunc(sysdate-20) then 'ok' else 'not ok' end action, * from table_y
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for r in (select * from log) loop if r.action = 'ok' update table_y set.. where..
Je voudrais savoir si le 2eme est plus performant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for r in (select * from log) loop update.. set.. where.. and r.action = 'ok'![]()
Partager