Bonjour,
de manière mensuelle et au coup par coup si les règles sont modifiées en cours d'année j'ai une table de +/- 50millions de records a mettre a jour (l'update portant sur 10 millions de lignes).

l'update étant assez complexe j'ai tout regroupé dans une fonction.
A plusieurs endroits de cette fonction j'exécute le même query basique du style:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
select champ1 into ma_var
from ma_table
where cle = parametre_in_de_ma_fonction
ce que je n'aime pas c'est que ce bout de code est répeté +/- 6 fois actuellement dans ma fonction et que cela risque d'augmenter et que c'est idiot.
Au niveau performance a ce que j'ai vu la compilation tranforme le query en sql dynamique car le select envoyé au moteur devient

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
select champ1 into ma_var
from ma_table
where cle = :1
et ca ca me plait déja bien.

par contre je me demandais si je risquais une perte de performance en le passant moi-même via un execute immediate, en réalité dans le cas présent ca ne va pas changer la face du monde, mais je commence a bien aimer comprendre les différences de ce genre de subtilité.

donc en gros y a t'il une différence entre faire ceci 6x

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
select champ1 into ma_var
from ma_table
where cle = parametre_in_de_ma_fonction
ou alors

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
qry:= 'select champ1 into ma_var
from ma_table
where cle = :1';
et faire 6 execute immediate?

(ca ressemble vraiment a une question d'enculeur de mouche mais je me suis réellement posé la question)

merci a vous