我看到在我的跟蹤文件中執行以下操作:含義文件
綁定#3 oacdty = 01 MXL = 128(35)mxlc = 36 MAL = 00 SCL = 00預= 00
oacflg = 03 FL2 = 1000010 FRM = 01 CSI = 31 SIZ = 0關= 168
kxsbbbfp = ffffffff79f139a8億= 128 AVL = 35 FLG = 01值= 「1234W¯¯ 1234西,西樹叢城」
我想知道mxlc的值是多少?
我看到在我的跟蹤文件中執行以下操作:含義文件
綁定#3 oacdty = 01 MXL = 128(35)mxlc = 36 MAL = 00 SCL = 00預= 00
oacflg = 03 FL2 = 1000010 FRM = 01 CSI = 31 SIZ = 0關= 168
kxsbbbfp = ffffffff79f139a8億= 128 AVL = 35 FLG = 01值= 「1234W¯¯ 1234西,西樹叢城」
我想知道mxlc的值是多少?
我引用
Bind #n
oacdty - Datatype code
mxl - Maximum length of the bind variable value (private maximum length in parentheses)
mxlc - Unknown :(
mal - array length
scl - Scale
pre - Precision
oacflg - Special flag indicating bind options
fl2 - second part of oacflg
frm - Unknown :(
csi - Unknown :(
siz - Amount of memory to be allocated for this chunk
off - Offset into this chunk for this bind buffer
kxsbbbfp- Bind address
bln - Bind buffer length
avl - actual value length
flg - bind status flag
value - Value of the bind variable
書中還quotes-
目前三個參數的任何信息。
它們是mxlc
,frm
和csi
。
摘要
mxlc
似乎是綁定變量的最大字符數,但僅當該變量使用字符長度語義。
方法
我搜索我的mxlc
Oracle支持。幾乎每篇文章都有mxlc=00
,唯一的例外是NVARCHAR
或NCHAR
。以下代碼基於來自文檔ID 552262.1的代碼。我改變了變量大小(99
和123 char
),並且如果使用字符長度語義,每次mxlc
被設置爲可變大小。
代碼
create table t1(ncol1 nvarchar2(100), col1 varchar2(100));
alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 4';
VAR nvar1 NVARCHAR2(99)
VAR var1 VARCHAR2(123 char)
EXEC :nvar1 := 'nvarchar'
EXEC :var1 := 'varchar'
SELECT * FROM T1 WHERE ncol1 = :nvar1 and col1 = :var1;
ALTER SESSION SET EVENTS '10046 trace name context off';
結果:
Bind#0
oacdty=01 mxl=2000(198) mxlc=99 mal=00 scl=00 pre=00
oacflg=03 fl2=1000010 frm=02 csi=2000 siz=4000 off=0
kxsbbbfp=0e702edc bln=2000 avl=16 flg=05
value=0 6e 0 76 0 61 0 72 0 63 0 68 0 61 0 72
Bind#1
oacdty=01 mxl=2000(369) mxlc=123 mal=00 scl=00 pre=00
oacflg=03 fl2=1000010 frm=01 csi=873 siz=0 off=2000
kxsbbbfp=0e7036ac bln=2000 avl=07 flg=01
value="varchar"
更多問題
通常mxl
和mxlc
之間的關係是有道理的。對於我的系統中的一個NVARCHAR
(UTF16),每個字符將有2個字節,因此爲198和99.我的數據庫爲UTF8,一個字符最多可能需要4個字節。也許Oracle猜測平均大小將是3個字節,因此是123和369.顯然它可能超過369個,也許這只是分配的初始內存,並且可能稍後增長?
但是你的數字36和35對我沒有意義。當然字節數永遠不可能是LESS比字符數量多少?甲骨文做出了一個錯誤的猜測,或者是一些客戶端程序發送錯誤的數據?
感謝您的意見。這確實很奇怪。 – Craig
哈哈..不完全是我所希望的。你從哪裏找到這張桌子? – Craig
:)這是一個祕密。它來自[this](http://www.amazon.com/Secret-ORACLE-Unleashing-Leveraging-Undocumented/dp/1435705513)書。這些參數看起來沒有證件。 – Annjawn
[Snippet](http://books.google.com/books?id=Go3QBdT-qysC&pg=PA237&lpg=PA237&dq=mxlc+Oracle&source=bl&ots=J4ZRhUvF5s&sig=A9Dkbn6XoNk2PonfkrGKzAYH8u4&hl=en#v=onepage&q=mxlc%20Oracle&f=false)of這本書。 – Annjawn