2012-09-06 15 views
5

tôi nhìn thấy những điều sau đây dấu vết của tôi file:Ý nghĩa của mxlc trong Oracle vết nộp

Bind # 3 oacdty = 01 MXL = 128 (35) mxlc = 36 mal = 00 SCL = 00 trước = 00
oacflg = 03 fl2 = 1.000.010 frm = 01 csi = 31 siz = 0 off = 168
kxsbbbfp = ffffffff79f139a8 tỷ = 128 AVL = 35 FLG = 01 value = "1234 W 1234 Tây, Tây Groves City"

Tôi tự hỏi giá trị mxlc là gì?

Trả lời

4

tôi trích dẫn

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 

Source (& snippet của cuốn sách)

Cuốn sách cũng quotes-

Hiện tại chưa có thông tin về ba tham số.

Đây là mxlc, frmcsi.

+0

haha ​​.. không chính xác những gì tôi đã hy vọng. Bạn đã tìm thấy bảng này ở đâu? – Craig

+0

:) Đó là một bí mật. Của nó từ [this] (http://www.amazon.com/Secret-ORACLE-Unleashing-Leveraging-Undocumented/dp/1435705513) cuốn sách. Những tham số này là không có giấy tờ có vẻ như. – Annjawn

+0

[Đoạn trích] (http://books.google.com.vn/books?id=Go3QBdT-qysC&pg=PA237&lpg=PA237&dq=mxlc+Oracle&source=bl&ots=J4ZRhUvF5s&sig=A9Dkbn6XoNk2PonfkrGKzAYH8u4&hl=vi#v=onepage&q=mxlc%20Oracle&f=false) trong tổng số quyển sách. – Annjawn

2

Tóm tắt

mxlc dường như là số lượng ký tự tối đa cho biến ràng buộc, nhưng chỉ khi biến sử dụng ngữ nghĩa chiều dài ký tự.

Phương pháp

Tôi đã tìm kiếm Hỗ trợ Oracle của tôi cho mxlc. Hầu như mọi bài viết đều có mxlc=00, ngoại lệ duy nhất liên quan đến một số NVARCHAR hoặc NCHAR. Mã dưới đây dựa trên mã từ ID tài liệu 552262.1. Tôi đã thay đổi kích thước biến (99123 char) xung quanh và mỗi lần mxlc được đặt thành kích thước biến nếu ngữ nghĩa độ dài ký tự được sử dụng.

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'; 

Kết quả:

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" 

Nhiều câu hỏi

Thông thường mối quan hệ giữa mxlmxlc có ý nghĩa. Đối với một NVARCHAR, UTF16 trên hệ thống của tôi, sẽ có 2 byte cho mỗi ký tự, do đó 198 và 99. Cơ sở dữ liệu của tôi là UTF8, một ký tự có thể mất tới 4 byte. Có lẽ Oracle đoán kích thước trung bình sẽ là 3 byte, do đó 123 và 369. Rõ ràng nó có thể là hơn 369, có lẽ đó chỉ là bộ nhớ ban đầu được phân bổ, và nó có thể phát triển sau này?

Nhưng số của bạn, 36 và 35, không hợp lý với tôi.Chắc chắn số byte không bao giờ có thể là LESS hơn số ký tự? Oracle có dự đoán xấu hay là một số chương trình khách hàng gửi dữ liệu xấu?

+0

Cảm ơn bạn đã nhập. Thật kỳ lạ. – Craig