Recherche d'ordres SQL "factorisables" dans Oracle

Juste un rapide commentaire pour indiquer une colonne très utile sur les environnements transactionnels avec le paramètre cursor_sharing=EXACT. Si vous cherchez à détecter des requêtes qui s’éxécuteraient de manière très fréquente avec des valeurs litérales plutôt qu’avec des variables bind, regardez la colonne FORCE_MATCHING_SIGNATURE de la vue V$SQL ; voici une petite démonstration :

select 1 from dual;
select 2 from dual;
select 3 from dual;

col sql_text format a60
set lines 120
col FORCE_MATCHING_SIGNATURE format 99999999999999999999
select sql_id,
force_matching_signature,
sql_text
from v$sql where regexp_like(sql_text, '([d]ual)$')
order by 2;

SQL_ID FORCE_MATCHING_SIGNATURE SQL_TEXT
------------- ------------------------ ----------------------------------
0rnt8v06tb3sp 4921956989962288504 select sysdate + 10/1440 from dual
9fusd37prv595 10559245208183986822 select 2 from dual
1rqd29uzs8ra1 10559245208183986822 select 3 from dual
520mkxqpf15q8 10559245208183986822 select 1 from dual

La valeur de cette colonne est identique pour les ordres qui seraient identique avec la valeur cursor_sharing=FORCE ; un rank() ou un group by et vous pourrez très vite détecter des problèmes (certes très évidents) dans le code. Pour en savoir plus sur cette colonne, jetez un oeil à la documentation de référence.