v$sql_bind_capture 獲取繫結變數資訊

gaopengtttt發表於2010-11-03

擷取自

http://lzfhope.blog.163.com/blog/static/6363992200810206721744/

v$sql_bind_capture
       對於遊標中定義的每一個繫結變數都會有檢視中的一行對應。主要包含三個部分:指向父遊標(hash_value, address)和子游標(hash_value, child_address)的資訊,變數型別定義,變數的值(不包含複雜的值:LONG,LOB,和ADT型別)只有它們是位於where字句或者HAVING字句的時候才有捕捉。
       當初始化引數STATISTICS_LEVEL=BASIC的時候,不進行繫結捕捉。
       可以和V$SQLAREA on (HASH_VALUE, ADDRESS)  ,V$SQL on (HASH_VALUE, CHILD_ADDRESS),也就是指向父遊標和子有效。
      舉例如下:
      declare
         vname varchar2(30);
         vcount int;
         vsql varchar2(1000);
      begin
         VNAME:='EMPLOYEE';
         vsql:='select count(*) from tab where tname=:BVTEST';
         EXECUTE IMMEDIATE VSQL INTO VCOUNT USING VNAME;
         DBMS_OUTPUT.put_line(VCOUNT);
      end;         
      select * from v$sql_bind_capture  WHERE NAME=':BVTEST';  --可以看到值為EMPLOYEE
      SELECT * FROM V$SQLAREA WHERE SQL_ID='90d1g75d8gjph'  --可以更具SQL_ID查詢共享池中SQL。
      select * from v$sqlarea where (hash_value,address)=
         (select hash_value,address from v$sql_bind_capture where NAME=':BVTEST') --可以查詢到對應父遊標
      select * from v$sql     where (hash_value,child_address)=
         (select hash_value,child_address from v$sql_bind_capture where NAME=':BVTEST') --可找到對應子游標。

      

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-677319/,如需轉載,請註明出處,否則將追究法律責任。

相關文章