STS (SQL Tuning Set) のバインド値は、DBA_SQLSET_BINDS のVALUE 列から確認が可能です。
ただ、これ、ANYDATA 型。。。
SQL> DESC DBA_SQLSET_BINDS Name Null? Type ----------------------------------------- -------- ---------------------------- SQLSET_NAME VARCHAR2(128) SQLSET_OWNER VARCHAR2(128) SQLSET_ID NUMBER CON_DBID NUMBER SQL_ID VARCHAR2(13) FORCE_MATCHING_SIGNATURE NUMBER PLAN_HASH_VALUE NUMBER POSITION NUMBER VALUE ANYDATA CAPTURED CHAR(1) SQL_SEQ NUMBER
データを確認するのにちょっとコツがいります。
普通に VALUES列を検索しても格納されているデータは見えません。
SQL> SELECT POSITION, VALUE FROM DBA_SQLSET_BINDS 2 WHERE SQLSET_NAME='HOGEHOGE' AND SQL_ID='XXXXXXXXXXXXX'; POSITION VALUES() ---------- ------------- 1 ANYDATA()
まずは、型を確認。
SQL> SELECT POSITION, ANYDATA.GETTYPENAME(VALUE) AS TYPE FROM DBA_SQLSET_BINDS 2 WHERE SQLSET_NAME='HOGEHOGE' AND SQL_ID='XXXXXXXXXXXXX'; POSITION TYPE ---------- ------------- 1 SYS.VARCHAR2
型にあわせて ACCESS* ファンクションを使用。
SQL> SELECT POSITION, ANYDATA.ACCESSVARCHAR2(VALUE) AS VCHAR2 FROM DBA_SQLSET_BINDS 2 WHERE SQLSET_NAME='HOGEHOGE' AND SQL_ID='XXXXXXXXXXXXX'; POSITION VCHAR2 -------- ------------- 1 TEST
今回の場合は、ACCESSVARCHAR2ファンクションを使用していますが、ANYDATA.ACCESSNUMBER や ANYDATA.ACCESSDATA といった、ファンクションもあります。データ型に合わせて使用する必要があり、タイプがマッチしない場合は、NULL が返ります。
めんどくさいですが、CASE文にすれば 1SQL で複数タイプのデータを取得することも可能です。めんどくさいですが。