Bind-Variablen in Oracle 10g/11g auslesen

In Oracle 10g und 11g können die Werte der Bind-Variablen mit der View V$SQL_BIND_CAPTURE für SQL-Anweisungen ermittelt werden. Dafür kann folgendes Skript verwendet werden:


SELECT /*SQLBINDS*/
  VS.SQL_TEXT SQL_TEXT,
  VSBC.NAME BIND_NAME,
  VSBC.VALUE_STRING BIND_STRING
FROM V$SQL VS
  JOIN V$SQL_BIND_CAPTURE VSBC
    ON VS.SQL_ID=VSBC.SQL_ID
WHERE VSBC.VALUE_STRING IS NOT NULL
AND VS.SQL_TEXT LIKE '%&SEARCHSTRING%'
AND VS.SQL_TEXT NOT LIKE '%SQLBINDS%'
/

Dieses Skript sucht nach einer SQL-Anweisung über eine angegebene Zeichenkette.

In einem Beispiel könnte dieses so aussehen:


SQL> col sql_text format a30
SQL> col bind_name format a10
SQL> col bind_string format a10
SQL> var p_numm number
SQL> exec :p_numm:=100
PL/SQL procedure successfully completed.

SQL> select last_name from hr.employees where employee_id=:p_numm;

LAST_NAME
-------------------------
King

SQL> SELECT /*SQLBINDS*/
2   VS.SQL_TEXT SQL_TEXT,
3   VSBC.NAME BIND_NAME,
4   VSBC.VALUE_STRING BIND_STRING
5  FROM
6   V$SQL VS
7   JOIN V$SQL_BIND_CAPTURE VSBC
8     ON VS.SQL_ID=vsbc.SQL_ID
9  WHERE
10   VSBC.VALUE_STRING IS NOT NULL
11   AND VS.SQL_TEXT LIKE '%&SEARCHSTRING%'
12*  AND VS.SQL_TEXT NOT LIKE '%SQLBINDS%'
Enter value for searchstring: employees
old  11:  AND VS.SQL_TEXT like '%&SEARCHSTRING%'
new  11:  AND VS.SQL_TEXT like '%employees%'

SQL_TEXT                       BIND_NAME  BIND_STRIN
------------------------------ ---------- ----------
select last_name from hr.emplo :P_NUMM    100
yees where employee_id=:p_numm