v$sql_bind_capture與timestamp型別的繫結變數的數值
v$sql_bind_capture與timestamp型別的繫結變數的數值
我們的一個程式(10g)存在一個隱式型別轉換的問題,就是程式中使用timestmp型別,而表的定義為date型別。這樣存在隱式轉換。在查詢v$sql_bind_capture檢視時(10g),一直無法從VALUE_STRING獲取相應數值,顯示為NULL。實際上相關的值也儲存在value_anydata中,如何中value_anydata中抽取呢?(11GR2也存在類似的問題).
google oracle anydata
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_anydat.htm
SELECT SQL_ID,NAME, POSITION, datatype_string, max_length, value_string, DUMP (value_anydata), ANYDATA.accesstimestamp (value_anydata)
FROM v$sql_bind_capture a
WHERE a.value_string IS NULL AND a.value_anydata IS NOT NULL AND datatype_string = 'TIMESTAMP'
SQL_ID,NAME,POSITION,DATATYPE_STRING,MAX_LENGTH,VALUE_STRING,DUMP(VALUE_ANYDATA),ANYDATA.ACCESSTIMESTAMP(VALUE_ANYDATA)
5dfmd823r8dsp,:BEGIN_INTERVAL_TIME,4,TIMESTAMP,11,,Typ=58 Len=25: 160,1,140,10,0,0,0,0,248,153,239,49,219,42,0,0,120,40,201,49,219,42,0,0,120,2011-12-13 9:00:20.541000000
5dfmd823r8dsp,:END_INTERVAL_TIME,5,TIMESTAMP,11,,Typ=58 Len=25: 160,1,140,10,0,0,0,0,248,153,239,49,219,42,0,0,120,40,201,49,219,42,0,0,120,2011-12-13 10:00:24.082000000
42cfrr6x5t75c,:B2,3,TIMESTAMP,11,,Typ=58 Len=25: 160,1,140,10,0,0,0,0,248,153,239,49,219,42,0,0,120,40,201,49,219,42,0,0,120,2011-12-13 10:00:24.082000000
實際上如果是其他型別的資料也可以呼叫相應的函式實現。
例子:
1.建立測試表:
SQL> create table t1 as select rownum id ,'test' b from dual connect by level <=10;
Table created.
SQL> create unique index i_t1_id on t1(id);
Index created.
2.
SQL> var a number;
SQL> exec :a := 1;
PL/SQL procedure successfully completed.
SQL> select * from t1 where id= :a;
ID NAME
------------ ----
000001 test
SQL> @dpc
PLAN_TABLE_OUTPUT
--------------------------------------
SQL_ID dyn7rd9t0u9n5, child number 0
-------------------------------------
select * from t1 where id= :a
Plan hash value: 1175136253
--------------------------------------------------------
| Id | Operation | Name | E-Rows |
--------------------------------------------------------
| 0 | SELECT STATEMENT | | |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 |
|* 2 | INDEX UNIQUE SCAN | I_T1_ID | 1 |
--------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"=:A)
Note
-----
- Warning: basic plan statistics not available. These are only collected when:
* hint 'gather_plan_statistics' is used for the statement or
* parameter 'statistics_level' is set to 'ALL', at session or system level
39 rows selected.
--也許要執行多次才能capture。
3.
select NAME, POSITION, datatype_string, max_length, value_string,ANYDATA.accessnumber (value_anydata) from v$sql_bind_capture where sql_id='dyn7rd9t0u9n5';
NAME POSITION DATATYPE_STRING MAX_LENGTH VALUE_STRI VA
---------- ---------- ------------------------------ ---------- ---------- ------
:A 1 NUMBER 22 1 1
我們的一個程式(10g)存在一個隱式型別轉換的問題,就是程式中使用timestmp型別,而表的定義為date型別。這樣存在隱式轉換。在查詢v$sql_bind_capture檢視時(10g),一直無法從VALUE_STRING獲取相應數值,顯示為NULL。實際上相關的值也儲存在value_anydata中,如何中value_anydata中抽取呢?(11GR2也存在類似的問題).
google oracle anydata
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_anydat.htm
SELECT SQL_ID,NAME, POSITION, datatype_string, max_length, value_string, DUMP (value_anydata), ANYDATA.accesstimestamp (value_anydata)
FROM v$sql_bind_capture a
WHERE a.value_string IS NULL AND a.value_anydata IS NOT NULL AND datatype_string = 'TIMESTAMP'
SQL_ID,NAME,POSITION,DATATYPE_STRING,MAX_LENGTH,VALUE_STRING,DUMP(VALUE_ANYDATA),ANYDATA.ACCESSTIMESTAMP(VALUE_ANYDATA)
5dfmd823r8dsp,:BEGIN_INTERVAL_TIME,4,TIMESTAMP,11,,Typ=58 Len=25: 160,1,140,10,0,0,0,0,248,153,239,49,219,42,0,0,120,40,201,49,219,42,0,0,120,2011-12-13 9:00:20.541000000
5dfmd823r8dsp,:END_INTERVAL_TIME,5,TIMESTAMP,11,,Typ=58 Len=25: 160,1,140,10,0,0,0,0,248,153,239,49,219,42,0,0,120,40,201,49,219,42,0,0,120,2011-12-13 10:00:24.082000000
42cfrr6x5t75c,:B2,3,TIMESTAMP,11,,Typ=58 Len=25: 160,1,140,10,0,0,0,0,248,153,239,49,219,42,0,0,120,40,201,49,219,42,0,0,120,2011-12-13 10:00:24.082000000
實際上如果是其他型別的資料也可以呼叫相應的函式實現。
例子:
1.建立測試表:
SQL> create table t1 as select rownum id ,'test' b from dual connect by level <=10;
Table created.
SQL> create unique index i_t1_id on t1(id);
Index created.
2.
SQL> var a number;
SQL> exec :a := 1;
PL/SQL procedure successfully completed.
SQL> select * from t1 where id= :a;
ID NAME
------------ ----
000001 test
SQL> @dpc
PLAN_TABLE_OUTPUT
--------------------------------------
SQL_ID dyn7rd9t0u9n5, child number 0
-------------------------------------
select * from t1 where id= :a
Plan hash value: 1175136253
--------------------------------------------------------
| Id | Operation | Name | E-Rows |
--------------------------------------------------------
| 0 | SELECT STATEMENT | | |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 |
|* 2 | INDEX UNIQUE SCAN | I_T1_ID | 1 |
--------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID"=:A)
Note
-----
- Warning: basic plan statistics not available. These are only collected when:
* hint 'gather_plan_statistics' is used for the statement or
* parameter 'statistics_level' is set to 'ALL', at session or system level
39 rows selected.
--也許要執行多次才能capture。
3.
select NAME, POSITION, datatype_string, max_length, value_string,ANYDATA.accessnumber (value_anydata) from v$sql_bind_capture where sql_id='dyn7rd9t0u9n5';
NAME POSITION DATATYPE_STRING MAX_LENGTH VALUE_STRI VA
---------- ---------- ------------------------------ ---------- ---------- ------
:A 1 NUMBER 22 1 1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-713215/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過v$sql_bind_capture 檢視繫結變數。SQLAPT變數
- input,select, v-model 繫結的值為數字型別型別
- [20200326]繫結變數抓取與NULL值.txt變數Null
- 如何用FGA得到繫結變數的值變數
- JavaScript - 變數、值、型別JavaScript變數型別
- cursor_sharing=force強制繫結變數不會把變數值預設當成varchar2型別的理解變數型別
- [20191213]共享池繫結變數的值在哪裡.txt變數
- [20180930]in list與繫結變數個數.txt變數
- [20210120]in list與繫結變數個數.txt變數
- [20180930]in list與繫結變數.txt變數
- [20180912]PLSLQ與繫結變數.txt變數
- V$sql查詢未使用繫結變數的語句SQL變數
- [20191216]共享池繫結變數的值在哪裡2.txt變數
- [20211227]抽取跟蹤檔案中的繫結變數值.txt變數
- 分析 JavaScript 的資料型別與變數JavaScript資料型別變數
- 淺談變數型別之外的變數命名變數型別
- c++中的變數型別_C ++中的變數C++變數型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- [20220414]toad與繫結變數peek.txt變數
- 二、變數與資料型別變數資料型別
- TypeScript 數值型別TypeScript型別
- Python數值型別Python型別
- JavaScript變數型別檢測總結JavaScript變數型別
- Python3學習 (變數+值型別+引用型別+列表的可變+元組的不可變+運算子號)Python變數型別
- [20231210]執行計劃與繫結變數.txt變數
- [20190506]檢視巢狀與繫結變數.txt巢狀變數
- Rust的變數型別__Data typeRust變數型別
- 大樓的基石 資料型別 變數與常量資料型別變數
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- PHP變數型別PHP變數型別
- Java 變數型別Java變數型別
- 變數型別-Set變數型別
- FLOAT:浮點數值資料的大致數值資料型別資料型別
- 修改全域性變數時,可變型別和不可變型別的區別變數型別
- 型別的本質:對變數、型別、指標的理解型別變數指標
- mysql 字串型別的數值欄位按照數值的大小進行排序MySql字串型別排序
- C++變數總結束 | 輸出各種變數的值C++變數
- 在繫結變數下使用outline變數
- MySQL高階特性——繫結變數MySql變數