前言
构造一个SQL查询语句,执行OCIStmtExecute后,会发出一个包,收到1个包。
发出的包,包含SQL语句 :select * …
收到的包:
结果集列信息描述(结果集列数量,列名称,列数据类型)
今天对回包进行了初步分析, 确定了tns流(列信息描述)数据每一步的读取数量。这样,这个流就不是杂乱无章,而是可以看出一些逻辑(即使不继续分析,只看数据的分隔)。
只有执行OCIStmtFetch后,才会返回结果集.
例外:
如果行结果较小,在这个列描述信息的下面,会带上第一个行结果,然后才是结果集的其他描述信息. OCIStmtFetch后,实际上是从缓存中拿的行结果,并没有向数据库发出请求行集的包。
实验数据-结果集列描述信息
0000 00 50 56 c0 00 08 00 0c 29 24 d3 86 08 00 45 00 .PV.....)$....E.
0010 03 be 07 d3 40 00 80 06 05 93 c0 a8 b4 81 c0 a8 ....@...........
0020 b4 01 05 f1 59 31 98 3f 1b 3b fb 8e f7 b7 50 18 ....Y1.?.;....P.
0030 01 00 d0 95 00 00 03 96 00 00 06 00 00 00 00 00 ................
0040 10 // rd 1 bytes, Data ID: Describe Information (0x10)
17 00 00 00 // rd 4 bytes
27 e6 48 2c 16 04 06 b1 // rd 8 bytes
e1 1b a6 .....'.H,.......
0050 43 f9 df 70 b5 // rd 8 bytes
78 76 01 07 // rd 4 bytes
0b 27 // rd 2 bytes
0f // rd 1 bytes
98 00 00 00 C..p.xv...'..... // rd 4 bytes
0060 03 00 00 00 // rd 4 bytes
51 // rd 1 bytes
01 // rd 1 bytes
01 80 00 00 32 00 00 00 // rd 8 bytes
00 00 ....Q.....2.....
0070 00 00 00 00 00 00 // rd 8 bytes
00 00 00 00 00 00 00 00 // rd 8 bytes
00 00 ................
0080 00 00 69 03 01 00 // rd 8 bytes
32 00 00 00 00 00 00 00 // rd 8 bytes
00 // rd 1 bytes
05 ..i...2......... // rd 1 bytes
0090 05 00 00 00 // rd 4 bytes
05 // rd 1 bytes, 如果 == 0xfc, 说明数据长度 > 0xff
54 4f 50 49 43 // rd 5 bytes
00 00 00 00 // rd 4 bytes
00 00 .....TOPIC......
00a0 00 00 // rd 4 bytes
00 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
01 // rd 1 bytes
02 00 00 81 16 00 00 ................
00b0 00 // rd 8 bytes
00 00 00 00 00 00 00 00 // rd 8 bytes
00 00 00 00 00 00 00 ................
00c0 00 // rd 8 bytes
00 00 00 00 00 00 00 00 // rd 8 bytes
00 00 00 00 00 00 00 ................
00d0 00 // rd 8 bytes
00 // rd 1 bytes
03 // rd 1 bytes
03 00 00 00 // rd 4 bytes
03 // rd 1 bytes
53 45 51 // rd 3 bytes
00 00 00 00 // rd 4 bytes
00 ........SEQ.....
00e0 00 00 00 // rd 4 bytes
01 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
01 // rd 1 bytes
01 80 00 00 50 00 ..............P.
00f0 00 00 // rd 8 bytes
00 00 00 00 00 00 00 00 // rd 8 bytes
00 00 00 00 00 00 ................
0100 00 00 // rd 8 bytes
00 00 00 00 69 03 01 00 // rd 8 bytes
50 00 00 00 00 00 ......i...P.....
0110 00 00 // rd 8 bytes
01 // rd 1 bytes
04 // rd 1 bytes
04 00 00 00 // rd 4 bytes
04 // rd 1 bytes
49 4e 46 4f // rd 4 bytes
00 00 00 .........INFO...
0120 00 // rd 4 bytes
00 00 00 00 // rd 4 bytes
02 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
07 00 00 00 // rd 4 bytes
07 ................ // rd 1 bytes
0130 78 76 01 07 0e 07 07 // rd 7 bytes
01 00 00 00 // rd 4 bytes
e8 1f 00 00 // rd 4 bytes
1a xv..............
0140 00 00 00 // rd 4 bytes
1a 00 00 00 // rd 4 bytes
00 00 00 00 // rd 4 bytes
06 // rd 1 bytes
01 // rd 1 bytes
1a 00 03 ................ // rd 48(8 * 6)bytes
0150 00 00 00 00 00
01 00 00 00 00 00 00 00
00 00 00 ................
0160 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 ................
0170 00 00 00 00 00
00 00 00 00 00 00 00 00
07 // rd 1 bytes
0d // rd 1 bytes, this is a length(if >= 0xfc ...)
2c ..............., // rd 13(0x0d) bytes
0180 00 02 06 41 43 43 45 50 54 02 c1 02
08 // rd 1 bytes
06 00 // rd 2 bytes
51 ...ACCEPT......Q // rd 24(8 * 3)bytes
0190 89 12 00 00 00 00 00
03 00 00 00 00 00 00 00
00 ................
01a0 00 00 00 00 00 00 00
00 00 // rd 2 bytes
13 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
12 ................
01b0 00 00 00 // rd 4 bytes
12 // rd length(if >= 0xfc ...)
53 49 4d 50 4c 49 46 49 // rd 18 (0x12 = 8*2 + 2)bytes
45 44 20 43 ....SIMPLIFIED C
01c0 48 49 4e 45
53 45
10 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
05 00 00 00 HINESE.......... // rd 4 bytes
01d0 05 // rd 1 bytes
43 48 49 4e 41 // rd 5 bytes
09 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
03 00 00 00 .CHINA.......... // rd 4 bytes
01e0 03 // rd 1 bytes
ef bf a5 // rd 3 bytes
00 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
05 00 00 00 // rd 4 bytes
05 // rd 1 bytes
43 ...............C
01f0 48 49 4e 41 // rd 5 bytes
01 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
02 00 00 00 // rd 4 bytes
02 // rd 1 bytes
2e HINA............ // rd 2 bytes
0200 2c
02 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
08 00 00 00 // rd 4 bytes
08 // rd 1 bytes
41 4c 33 32 ,...........AL32 // rd 8 bytes
0210 55 54 46 38
0a 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
09 00 00 00 // rd 4 bytes
09 // rd 1 bytes
47 UTF8...........G // rd 9 bytes
0220 52 45 47 4f 52 49 41 4e
0c 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
09 00 REGORIAN........ // rd 4 bytes
0230 00 00
09 // rd 1 bytes
44 44 2d 4d 4f 4e 2d 52 52 // rd 9 bytes
07 00 // rd 2 bytes
00 00 ...DD-MON-RR.... // rd 4 bytes
0240 00 00
12 00 00 00 // rd 4 bytes
12 // rd 1 bytes
53 49 4d 50 4c 49 46 49 // rd 18(0x12 = 8 * 2 + 2) bytes
45 .......SIMPLIFIE
0250 44 20 43 48 49 4e 45
53 45
08 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
06 D CHINESE....... // rd 4 bytes
0260 00 00 00
06 // rd 1 bytes
42 49 4e 41 52 59 // rd 6 bytes
0b 00 // rd 2 bytes
00 00 00 00 ....BINARY...... // rd 4 bytes
0270 0e 00 00 00 // rd 4 bytes
0e // rd 1 bytes
48 48 2e 4d 49 2e 53 53 58 46 46 .....HH.MI.SSXFF // rd 14 (0x0e = 8 + 4 + 2) bytes
0280 20 41 4d
39 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
18 00 00 00 // rd 4 bytes
18 // rd 1 bytes
44 44 AM9..........DD // rd 24(0x18 = 8 * 3) bytes
0290 2d 4d 4f 4e 2d 52
52 20 48 48 2e 4d 49 2e
53 53 -MON-RR HH.MI.SS
02a0 58 46 46 20 41 4d
3a 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
12 00 00 00 XFF AM:......... // rd 4 bytes
02b0 12 // rd 1 bytes
48 48 2e 4d 49 2e 53 53 58 46 46 20 41 4d 20 .HH.MI.SSXFF AM // rd 18(0x12 = 8 * 2 + 2) bytes
02c0 54 5a 52
3b 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
1c 00 00 00 // rd 4 bytes
1c // rd 1 bytes
44 44 TZR;..........DD // rd 28(0x1c = 8 * 3 + 4) bytes
02d0 2d 4d 4f 4e 2d 52
52 20 48 48 2e 4d 49 2e
53 53 -MON-RR HH.MI.SS
02e0 58 46 46 20 41 4d
20 54 5a 52
3c 00 // rd 2 bytes
00 00 00 00 XFF AM TZR<..... // rd 4 bytes
02f0 03 00 00 00 // rd 4 bytes
03 // rd 1 bytes
ef bf a5 // rd 3 bytes
34 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
06 00 ........4....... // rd 4 bytes
0300 00 00
06 // rd 1 bytes
42 49 4e 41 52 59 // rd 6 bytes
32 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
04 ...BINARY2...... // rd 4 bytes
0310 00 00 00
04 // rd 1 bytes
42 59 54 45 // rd 4 bytes
3d 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
05 00 ....BYTE=....... // rd 4 bytes
0320 00 00
05 // rd 1 bytes
46 41 4c 53 45 // rd 5 bytes
3e 00 // rd 2 bytes
00 00 00 00 // rd 4 bytes
0b 00 ...FALSE>....... // rd 4 bytes
0330 00 00
0b // rd 1 bytes
80 00 00 00 44 3c 3c 80 00 00 00 // rd 11(0x0b = 8 + 2 + 1) bytes
a3 00 .......D<<...... // rd 2 bytes
0340 00 00 00 00 // rd 4 bytes
04 // rd 1 bytes
01 00 00 00 // rd 4 bytes
04 00 // rd 2 bytes
01 // rd 1 bytes
01 00 00 00 ................ // rd (8 * 16) bytes
0350 00 00 00 00 00 00 03 00 00 00 03 00 20 00 00 00 ............ ...
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0370 00 00 00 00 00 05 00 00 01 00 00 00 36 01 00 00 ............6...
0380 00 00 00 00 00 00 00 00 00 00 00 00 80 12 5d 19 ..............].
0390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 ............
实验数据-结果集列描述信息-整理1
又跟了一次,可能整理的更容易理解一些。
0000 00 50 56 c0 00 08 00 0c 29 91 36 b6 08 00 45 00 .PV.....).6...E.
0010 03 da 07 17 40 00 80 06 3a 32 c0 a8 9a 82 c0 a8 ....@...:2......
0020 9a 01 05 f1 7f 53 0a 1a ed 3b 04 43 92 4c 50 18 .....S...;.C.LP.
0030 01 00 17 67 00 00 03 b2 00 00 06 00 00 00 00 00 ...g............
// 0000000008FACCC0 10 17 00 00 00 27 E6 48 2C 16 04 06 B1 E1 1B A6 .....'鍴 ,...贬 ..
// 长度936
0040 10 // rd 1
17 00 00 00 // rd 4
// rd 23 (0x17 = 8 + 8 + 4 + 2 + 1)
27 e6 48 2c 16 04 06 b1
e1 1b a6 .....'.H,.......
0050 43 f9 df 70 b5
78 76 01 08
0f 29
10
98 00 00 00 C..p.xv...)..... // rd 4
0060 03 00 00 00 // rd 4
51 // rd 1
01 // rd 1
01 80 00 00 32 00 00 00 // rd 8
00 00 ....Q.....2.....
0070 00 00 00 00 00 00 // rd 8
00 00 00 00 00 00 00 00 // rd 8
00 00 ................
0080 00 00 54 03 01 00 // rd 8
32 00 00 00 00 00 00 00 // rd 8
00 // rd 1
05 ..T...2......... // rd 1
0090 05 00 00 00 // rd 4
05 // rd 1 (if > 0xfc)
54 4f 50 49 43 // rd 5
00 00 00 00 // rd 4
00 00 .....TOPIC......
00a0 00 00 // rd 4
00 00 // rd 2
00 00 00 00 // rd 4
01 // rd 1
02 00 00 81 16 00 00 ................
00b0 00 // rd 8
00 00 00 00 00 00 00 00 // rd 8
00 00 00 00 00 00 00 ................
00c0 00 // rd 8
00 00 00 00 00 00 00 00 // rd 8
00 00 00 00 00 00 00 ................
00d0 00 // rd 8
00 // rd 1
03 // rd 1
03 00 00 00 // rd 4
03 // rd 1
53 45 51 // rd 3
00 00 00 00 // rd 4
00 ........SEQ.....
00e0 00 00 00 // rd 4
01 00 // rd 2
00 00 00 00 // rd 4
01 // rd 1
01 80 00 00 50 00 ..............P.
00f0 00 00 // rd 8
00 00 00 00 00 00 00 00 // rd 8
00 00 00 00 00 00 ................
0100 00 00 // rd 8
00 00 00 00 54 03 01 00 // rd 8
50 00 00 00 00 00 ......T...P.....
0110 00 00
01 // rd 1
04 // rd 1
04 00 00 00 // rd 4
04 // rd 1
49 4e 46 4f // rd 4
00 00 00 .........INFO...
0120 00 // rd 4
00 00 00 00 // rd 4
02 00 // rd 2
00 00 00 00 // rd 4
07 00 00 00 // rd 4
07 ................ // rd 1
0130 78 76 01 08 0f 2b 16 // rd 7
01 00 00 00 // rd 4
e8 1f 00 00 // rd 4
1a xv...+..........
0140 00 00 00 // rd 4
1a 00 00 00 // rd 4
00 00 00 00 // rd 4
06 // rd 1
01 // rd 1
// rd 48
1a 00 03 ................
0150 00 00 00 00 00
01 00 00 00 00 00 00 00
00 00 00 ................
0160 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 ................
0170 00 00 00 00 00
00 00 00 00 00 00 00 00
07 // rd 1
2b // rd 1(length)
// rd 43(0x2b = 8 * 5 + 2 + 1)
0c ..............+.
0180 01 03 00 40 7c 91 00
22 06 41 43 43 45 50 54
02 ...@|..".ACCEPT.
0190 c1 02 17 69 6e 66 6f
3a 73 65 71 3d 31 2c 74
6f ...info:seq=1,to
01a0 70 69 63 3d 41 43 43
45 50
54
08 // rd 1
06 00 // rd 2
// rd 24(0x18)
38 f5 11 pic=ACCEPT...8..
01b0 00 00 00 00 00
03 00 00 00 00 00 00 00
00 00 00 ................
01c0 00 00 00 00 00
00 00 // rd 2
13 00 // rd 2
00 00 00 00 // rd 4
12 00 00 ................
01d0 00 // rd 4
12 // rd 1
// rd 18(0x12)
53 49 4d 50 4c 49 46 49 45 44 20 43 48 49 ..SIMPLIFIED CHI
01e0 4e 45 53 45
10 00 // rd 2
00 00 00 00 // rd 4
05 00 00 00 // rd 4
05 // rd 1
43 NESE...........C
01f0 48 49 4e 41 // rd 5
09 00 // rd 2
00 00 00 00 // rd 4
02 00 00 00 // rd 4
02 // rd 1
a3 HINA............
0200 a4 // rd 2
00 00 // rd 2
00 00 00 00 // rd 4
05 00 00 00 // rd 4
05 // rd 1
43 48 49 4e ............CHIN
0210 41 // rd 5
01 00 // rd 2
00 00 00 00 // rd 4
02 00 00 00 // rd 4
02 // rd 1
2e 2c // rd 2
02 00 A............,.. // rd 2
0220 00 00 00 00 // rd 4
08 00 00 00 // rd 4
08 // rd 1
5a 48 53 31 36 47 42 .........ZHS16GB
0230 4b // rd 8
0a 00 // rd 2
00 00 00 00 // rd 4
09 00 00 00 // rd 4
09 // rd 1
47 52 45 47 K...........GREG
0240 4f 52 49 41 4e // rd 9
0c 00 // rd 2
00 00 00 00 // rd 4
09 00 00 00 // rd 4
09 ORIAN........... // rd 1
0250 44 44 2d 4d 4f 4e 2d 52 52 // rd 9
07 00 // rd 2
00 00 00 00 // rd 4
12 DD-MON-RR.......
0260 00 00 00 // rd 4
12 rd 1
53 49 4d 50 4c 49 46 49 45 44 20 43 ....SIMPLIFIED C
0270 48 49 4e 45 53 45 // rd 18
08 00 // rd 2
00 00 00 00 // rd 4
06 00 00 00 HINESE.......... // rd 4
0280 06 // rd 1
42 49 4e 41 52 59 // rd 6
0b 00 // rd 2
00 00 00 00 // rd 4
0e 00 00 .BINARY.........
0290 00 // rd 4
0e // rd 1
48 48 2e 4d 49 2e 53 53 58 46 46 20 41 4d ..HH.MI.SSXFF AM // rd 14
02a0 39 00 // rd 2
00 00 00 00 // rd 4
18 00 00 00 // rd 4
18 // rd 1
44 44 2d 4d 4f 9..........DD-MO
02b0 4e 2d 52 52 20 48 48 2e 4d 49 2e 53 53 58 46 46 N-RR HH.MI.SSXFF
02c0 20 41 4d // rd 0x18
3a 00 // rd 2
00 00 00 00 // rd 4
12 00 00 00 // rd 4
12 // rd 1
48 48 AM:..........HH
02d0 2e 4d 49 2e 53 53 58 46 46 20 41 4d 20 54 5a 52 .MI.SSXFF AM TZR // rd 0x12
02e0 3b 00 // rd 2
00 00 00 00 // rd 4
1c 00 00 00 // rd 4
1c // rd 1
44 44 2d 4d 4f ;..........DD-MO
02f0 4e 2d 52 52 20 48 48 2e 4d 49 2e 53 53 58 46 46 N-RR HH.MI.SSXFF
0300 20 41 4d 20 54 5a 52 // rd 0x1c
3c 00 // rd 2
00 00 00 00 // rd 4
02 00 00 AM TZR<........
0310 00 // rd 4
02 // rd 1
a3 a4 // rd 2
34 00 // rd 2
00 00 00 00 // rd 4
06 00 00 00 // rd 4
06 // rd 1
42 ....4..........B
0320 49 4e 41 52 59 // rd 6
32 00 // rd 2
00 00 00 00 // rd 4
04 00 00 00 // rd 4
04 INARY2.......... // rd 1
0330 42 59 54 45 // rd 4
3d 00 // rd 2
00 00 00 00 // rd 4
05 00 00 00 // rd 4
05 // rd 1
46 BYTE=..........F
0340 41 4c 53 45 // rd 5
3e 00 // rd 2
00 00 00 00 // rd 4
0b 00 00 00 // rd 4
0b // rd 1
80 ALSE>...........
0350 00 00 00 44 3c 3c 80 00 00 00
a3 00 // rd 2
00 00 00 00 ...D<<.......... // rd 4
0360 04 // rd 1, 0x00a3就读一个么?
01 00 00 00 // rd 4
04 00 // rd 2
01 // rd 1
// rd 16 * 8
01 00 00 00 00 00 00 00 ................
0370 00 00 03 00 00 00 03 00
20 00 00 00 00 00 00 00 ........ .......
0380 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 ................
0390 00 05 00 00 01 00 00 00
36 01 00 00 00 00 00 00 ........6.......
03a0 00 00 00 00 00 00 00 00
00 4d 6f 19 00 00 00 00 .........Mo.....
03b0 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 ................
03c0 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 ................
03d0 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 ................
03e0 00 00 00 00 00 00 00 00 ........