Il est possible de retrouver les valeurs de bind dans le protocole Oracle Net ou dans les traces du clients. Dans ce cas les valeurs apparaissent sous la forme d’un code au format hexadécimal XX YY YY YY YY YY
où:
XX
indique la longueur de la valeur passéeYY
indique la valeur elle-même
Le problème c’est que si décoder ces valeurs pour des champs texte est simple, décoder des champs numériques est plus compliqué a priori. Pour vous aider, Oracle fournit le package utl_raw
.
Ainsi si vous capturez par exemple la séquence 04 C3 03 4E 57
et que vous savez d’après le type passé en paramètre qu’il s’agit d’un type number
, il suffit d’exécuter la commande ci-dessous pour retrouver la valeur correspondante :
select utl_raw.cast_to_number('C3034E57') "NUMBER"
from dual;
NUMBER
----------
27786
Et voilà, il ne vous reste plus qu’à vous connecter à un port SPAN de votre switch ou à utiliser un outil comme Oracle Database Firewall et vous récupérerez bientôt les valeurs de vos variables binds sans succomber au principe d’incertitude d’Heisenberg.