XML DB - Nested Table Storage

This is the third page in a series investigating XML DB.

In order to store an XML document in database objects (as opposed to LOBs) the document must have an XML schema. See XML DB - Introduction for more information about the XML Schema and also the example on which these pages are based.

There are two ways of storing array data in XML DB; using a VARRAY and using a nested table. XML DB - VARRAY Storage covers creation of an XML schema called schema1.xsd which uses VARRAY storage for arrays. This page discusses use of nested table storage with XML documents using an XML schema called schema2.xsd which uses nested tables to store arrays.

XML Schema

The default storage option can be specified using the xdb:storeVarrayAsTable attribute in the header. This is "false" for VARRAY and "true" for nested tables.

We can specify the name of the table in which the document will be stored. For example to store the document in a table called ROUTE2 we specify xdb:defaultTable="ROUTE2" in the definition for the "route" element

The XML schema is defined as follows:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xdb="http://xmlns.oracle.com/xdb"
     version="1.0"
     xdb:storeVarrayAsTable="true">
  <xs:element name="route" xdb:defaultTable="ROUTE2">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="title" type="xs:string"/>
        <xs:element name="centre" type="xs:string"/>
        <xs:element name="zoom" type="xs:byte"/>
        <xs:element name="line">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="point" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:byte"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

The above schema is stored in /home/oracle/xdb/schema2.xsd. It specifies that the points array will be stored in a nested table and that the main table will be called ROUTE2

The XML schema can be loaded into the database using the following command:

BEGIN
  dbms_xmlschema.registerSchema
  (
    schemaurl => '/route/schema/schema2.xsd',
    schemadoc => bfilename ('XDBDIR','schema2.xsd'),
    local => TRUE,
    gentypes => TRUE,
    genbean => FALSE,
    gentables => TRUE
  );
END;
/

When the XML schema is loaded successfully, the underlying tables and indexes are created including the ROUTE2 table.

The ROUTE2 table will initially be empty:

SQL> SELECT COUNT(*) FROM route2;

  COUNT(*)
----------
         0

XML Document

The following XML document will be loaded into the database (/home/oracle/xdb/a21.xml):

<?xml version="1.0"?>
<route
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="/route/schema/schema2.xsd">
  <title>Great Orme Tramway</title>
  <centre>53.328387,-3.839557</centre>
  <zoom>16</zoom>
  <line id="1">
    <point>53.32724,-3.835605</point>
    <point>53.327511,-3.835986</point>
    <point>53.327777,-3.836697</point>
    <point>53.328046,-3.837305</point>
    <point>53.328339,-3.837928</point>
    <point>53.328425,-3.83822</point>
    <point>53.328626,-3.838598</point>
    <point>53.328677,-3.838783</point>
    <point>53.328669,-3.839604</point>
    <point>53.328667,-3.840342</point>
    <point>53.328744,-3.841262</point>
    <point>53.328768,-3.841398</point>
    <point>53.328949,-3.842007</point>
    <point>53.329026,-3.842104</point>
    <point>53.329113,-3.842144</point>
    <point>53.329946,-3.842141</point>
    <point>53.330179,-3.842125</point>
    <point>53.330296,-3.842209</point>
    <point>53.33038,-3.842353</point>
    <point>53.330423,-3.842549</point>
    <point>53.330588,-3.843512</point>
  </line>
</route>

In the above example, the route element has been extended to include the XSI namespace and the schema2.xsd XML schema.

The XML document can be loaded into the database using the following:

DECLARE
  res BOOLEAN;
BEGIN
  res := dbms_xdb.createResource
  (
    abspath => '/route/data/route2.xml',
    data => bfilename ('XDBDIR','a21.xml'),
    csid => nls_charset_id ('AL32UTF8')
  );
END;
/

In this case the source document is a21.xml and the target is route1.xml.

After the document has been loaded, the ROUTE2 table will contain one row:

SQL> SELECT COUNT(*) FROM route2;

  COUNT(*)
----------
         1

We can select the contents of the ROUTE2 table (Nested Tables) using:

SET PAGESIZE 1000
SET LONG 100000
SQL> SELECT * FROM route2;

SYS_NC_ROWINFO$
---------------------------------------------------------------------------
<?xml version="1.0"?>
<route xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSche
maLocation="/route/schema/schema2.xsd">
  <title>Great Orme Tramway</title>
  <centre>53.328387,-3.839557</centre>
  <zoom>16</zoom>
  <line id="1">
    <point>53.32724,-3.835605</point>
    <point>53.327511,-3.835986</point>
    <point>53.327777,-3.836697</point>
    <point>53.328046,-3.837305</point>
    <point>53.328339,-3.837928</point>
    <point>53.328425,-3.83822</point>
    <point>53.328626,-3.838598</point>
    <point>53.328677,-3.838783</point>
    <point>53.328669,-3.839604</point>
    <point>53.328667,-3.840342</point>
    <point>53.328744,-3.841262</point>
    <point>53.328768,-3.841398</point>
    <point>53.328949,-3.842007</point>
    <point>53.329026,-3.842104</point>
    <point>53.329113,-3.842144</point>
    <point>53.329946,-3.842141</point>
    <point>53.330179,-3.842125</point>
    <point>53.330296,-3.842209</point>
    <point>53.33038,-3.842353</point>
    <point>53.330423,-3.842549</point>
    <point>53.330588,-3.843512</point>
  </line>
</route>

Oracle returns the same results irrespective of whether the points array is stored in a VARRAY or a nested table.

Types

ROUTE2 is an object table of XMLType.

SQL> DESC route2
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------------
TABLE of SYS.XMLTYPE(XMLSchema "/route/schema/schema2.xsd" Element "route") STORAGE Object-relational TYPE "route907_T"

The table is based on the "route907_T" type. Note that the type name is case-sensitive, so all references must be enclosed in double quotes.

SQL> DESC "route907_T"
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------------
 SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
 title                                              VARCHAR2(4000 CHAR)
 centre                                             VARCHAR2(4000 CHAR)
 zoom                                               NUMBER(3)
 line                                               line908_T

A sub type called "line908_T" has been created for the lines

SQL> DESC "line908_T"
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------------
 SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
 id                                                 NUMBER(3)
 point                                              point909_COLL

Finally a collection type called "point909.col" has been created for the points.

SQL> DESC "point909_COLL"
 "point909_COLL" VARRAY(2147483647) OF VARCHAR2(4000 CHAR)

Objects

The following table summarizes objects created to support the XML schema:

SELECT object_id,object_name,object_type
FROM dba_objects
ORDER BY object_id;
OBJECT_ID OBJECT_NAME OBJECT_TYPE
79132 point909_COLL TYPE
79133 line908_T TYPE
79134 route907_T TYPE
79135 ROUTE2 TABLE
79136 SYS_NT4424qFrYL5LgQ2UFqMBruA== TABLE
79137 SYS_C0011635 INDEX
79138 NAMESPACES913_L LOB
79139 SYS_IL0000079135C00004$$ INDEX
79140 EXTRADATA912_L LOB
79141 SYS_IL0000079135C00005$$ INDEX
79142 SYS_XDBPD$910_L LOB
79143 SYS_IL0000079135C00007$$ INDEX
79144 SYS_XDBPD$911_L LOB
79145 SYS_IL0000079135C00011$$ INDEX
79146 SYS_C0011636 INDEX
79147 SYS_C0011637 INDEX
79148 XD4424qFq6L5LgQ2UFqMBruA== XML SCHEMA

In this example, the points are stored in a Nested Table

The objects created to support schema2.xsd are significantly different from those created for schema1.xsd.

In particular two tables have been created, ROUTE2 and a nested table with a system-generated name: SYS_NT4424qFrYL5LgQ2UFqMBruA==.

Also note that the LOB columns have a different naming convention for this XML schema.

We can investigate the nested table further. The DESCRIBE command reports the following:

SQL> DESC "SYS_NT4424qFrYL5LgQ2UFqMBruA=="
 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------------
 COLUMN_VALUE                                       VARCHAR2(4000 CHAR)

We cannot directly select the contents of the nested table:

SQL> SELECT * FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA==";
SELECT * FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA=="
              *
ERROR at line 1:
ORA-22812: cannot reference nested table column's storage table

However, we can use the NESTED_TABLE_GET_REFS hint to inspect the contents of the nested table. For example:

SQL> SELECT /*+ NESTED_TABLE_GET_REFS */ *
  2  FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA==";

COLUMN_VALUE
----------------------------------------------------------------------------
53.32724,-3.835605
53.327511,-3.835986
53.327777,-3.836697
53.328046,-3.837305
53.328339,-3.837928
53.328425,-3.83822
53.328626,-3.838598
53.328677,-3.838783
53.328669,-3.839604
53.328667,-3.840342
53.328744,-3.841262
53.328768,-3.841398
53.328949,-3.842007
53.329026,-3.842104
53.329113,-3.842144
53.329946,-3.842141
53.330179,-3.842125
53.330296,-3.842209
53.33038,-3.842353
53.330423,-3.842549
53.330588,-3.843512

21 rows selected.

Columns

DBA_TAB_COLUMNS only reports a single column for the ROUTE2 table.

SELECT column_id,column_name,data_type
FROM dba_tab_columns
WHERE table_name = 'ROUTE2'
ORDER BY column_id;
COLUMN_ID COLUMN_NAME DATA_TYPE
1 SYS_NC_ROWINFO$ XMLTYPE

The underlying COL$ table reports additional columns for ROUTE2:

SELECT col#,intcol#,segcol#,name,type#
FROM sys.col$
WHERE obj# = 79119
ORDER BY intcol#;
COL# INTCOL# SEGCOL# NAME TYPE#
0 1 1 SYS_NC_OID$ 23
1 2 0 SYS_NC_ROWINFO$ 58
1 3 2 XMLEXTRA 121
1 4 3 SYS_NC00004$ 123
1 5 4 SYS_NC00005$ 123
1 6 5 XMLDATA 121
1 7 6 SYS_NC00007$ 123
1 8 7 SYS_NC00008$ 1
1 9 8 SYS_NC00009$ 1
1 10 9 SYS_NC00010$ 2
1 11 10 SYS_NC00011$ 123
1 12 11 SYS_NC00012$ 2
1 13 0 SYS_NC00013$ 123
1 14 12 SYS_NC0001300014$ 23
0 15 13 ACLOID 23
0 16 14 OWNERID 23

The main difference is the additional column (internal column 14) which has the system generated name SYS_NC0001300014$

Block Dumps

The following statement reports the file number and block number of the row in ROUTE2:

SELECT
  dbms_rowid.rowid_relative_fno (rowid) AS fileno,
  dbms_rowid.rowid_block_number (rowid) AS blockno
FROM route2;

    FILENO    BLOCKNO
---------- ----------
         4       6591

SQL> ALTER SYSTEM DUMP DATAFILE 4 BLOCK 6591;

System altered.

The block dump is as follows:

Block header dump:  0x010019bf
 Object id on Block? Y
 seg/obj: 0x1351f  csc: 0x00.369805  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x10019b8 ver: 0x01 opc: 0
     inc: 0  exflg: 0

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0006.011.0000072e  0x00c0035b.0461.48  --U-    1  fsc 0x0000.0036980c
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x010019bf
data_block_dump,data header at 0x7f079d378064
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x7f079d378064
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1e77
avsp=0x1e63
tosp=0x1e63
0xe:pti[0]      nrow=1  offs=0
0x12:pri[0]     offs=0x1e77
block_row_dump:
tab 0, row 0, @0x1e77
tl: 289 fb: --H-FL-- lb: 0x1  cc: 14
col  0: [16]  e3 8d dd 12 9c ae 2f ed e0 43 65 05 a8 c0 b4 73
col  1: [ 1]  00
col  2: [68]
 80 88 01 fe 00 00 00 43 03 11 00 01 00 fe 00 00 00 01 31 50 00 03 78 73 69
 00 29 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 32 30 30 31 2f
 58 4d 4c 53 63 68 65 6d 61 2d 69 6e 73 74 61 6e 63 65
col  3: [23]
 80 88 01 fe 00 00 00 16 03 11 00 01 00 fe 00 00 00 01 04 56 31 2e 30
col  4: [ 1]  00
col  5: [59]
 80 88 01 fe 00 00 00 3a 03 11 00 01 00 fe 00 00 00 01 28 13 0f 02 00 84 00
 00 88 01 00 19 2f 72 6f 75 74 65 2f 73 63 68 65 6d 61 2f 73 63 68 65 6d 61
 32 2e 78 73 64 00 01 02 03
col  6: [18]  47 72 65 61 74 20 4f 72 6d 65 20 54 72 61 6d 77 61 79
col  7: [19]  35 33 2e 33 32 38 33 38 37 2c 2d 33 2e 38 33 39 35 35 37
col  8: [ 2]  c1 11
col  9: [27]
 80 88 01 fe 00 00 00 1a 03 11 00 01 00 fe 00 00 00 01 08 13 03 00 00 01 80
 80 15
col 10: [ 2]  c1 02
col 11: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col 12: [16]  ad 27 3a e4 53 11 06 c9 e0 43 1e 4e e5 0a eb f2
col 13: [ 4]  00 00 00 59
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 6591 maxblk 6591

In this example, the points data is stored in a separate nested table.

We can determine the file number and block number of the rows in the nested table using the following statement:

SELECT /*+ NESTED_TABLE_GET_REFS */ DISTINCT
  dbms_rowid.rowid_relative_fno (rowid) AS fileno,
  dbms_rowid.rowid_block_number (rowid) AS blockno
FROM "SYS_NT4424qFrYL5LgQ2UFqMBruA==";
    FILENO    BLOCKNO
---------- ----------
         4       6575

We can dump the block using:

SQL> ALTER SYSTEM DUMP DATAFILE 4 BLOCK 6575;

System altered.
Block header dump:  0x010019af
 Object id on Block? Y
 seg/obj: 0x13520  csc: 0x00.369804  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x10019a8 ver: 0x01 opc: 0
     inc: 0  exflg: 0

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0006.011.0000072e  0x00c0035b.0461.46  --U-   21  fsc 0x0000.0036980c
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x010019af
data_block_dump,data header at 0x7f8778e71a64
===============
tsiz: 0x1f98
hsiz: 0x3c
pbl: 0x7f8778e71a64
     76543210
flag=--------
ntab=1
nrow=21
frre=-1
fsbo=0x3c
fseo=0x1c14
avsp=0x1bd8
tosp=0x1bd8
0xe:pti[0]      nrow=21 offs=0
0x12:pri[0]     offs=0x1f6e
0x14:pri[1]     offs=0x1f43
0x16:pri[2]     offs=0x1f18
0x18:pri[3]     offs=0x1eed
0x1a:pri[4]     offs=0x1ec2
0x1c:pri[5]     offs=0x1e98
0x1e:pri[6]     offs=0x1e6d
0x20:pri[7]     offs=0x1e42
0x22:pri[8]     offs=0x1e17
0x24:pri[9]     offs=0x1dec
0x26:pri[10]    offs=0x1dc1
0x28:pri[11]    offs=0x1d96
0x2a:pri[12]    offs=0x1d6b
0x2c:pri[13]    offs=0x1d40
0x2e:pri[14]    offs=0x1d15
0x30:pri[15]    offs=0x1cea
0x32:pri[16]    offs=0x1cbf
0x34:pri[17]    offs=0x1c94
0x36:pri[18]    offs=0x1c6a
0x38:pri[19]    offs=0x1c3f
0x3a:pri[20]    offs=0x1c14
block_row_dump:
tab 0, row 0, @0x1f6e
tl: 42 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 02
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [18]  35 33 2e 33 32 37 32 34 2c 2d 33 2e 38 33 35 36 30 35
tab 0, row 1, @0x1f43
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 03
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 37 35 31 31 2c 2d 33 2e 38 33 35 39 38 36
tab 0, row 2, @0x1f18
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 04
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 37 37 37 37 2c 2d 33 2e 38 33 36 36 39 37
tab 0, row 3, @0x1eed
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 05
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 30 34 36 2c 2d 33 2e 38 33 37 33 30 35
tab 0, row 4, @0x1ec2
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 06
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 33 33 39 2c 2d 33 2e 38 33 37 39 32 38
tab 0, row 5, @0x1e98
tl: 42 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 07
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [18]  35 33 2e 33 32 38 34 32 35 2c 2d 33 2e 38 33 38 32 32
tab 0, row 6, @0x1e6d
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 08
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 36 32 36 2c 2d 33 2e 38 33 38 35 39 38
tab 0, row 7, @0x1e42
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 09
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 36 37 37 2c 2d 33 2e 38 33 38 37 38 33
tab 0, row 8, @0x1e17
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0a
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 36 36 39 2c 2d 33 2e 38 33 39 36 30 34
tab 0, row 9, @0x1dec
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0b
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 36 36 37 2c 2d 33 2e 38 34 30 33 34 32
tab 0, row 10, @0x1dc1
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0c
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 37 34 34 2c 2d 33 2e 38 34 31 32 36 32
tab 0, row 11, @0x1d96
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0d
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 37 36 38 2c 2d 33 2e 38 34 31 33 39 38
tab 0, row 12, @0x1d6b
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0e
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 38 39 34 39 2c 2d 33 2e 38 34 32 30 30 37
tab 0, row 13, @0x1d40
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 0f
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 39 30 32 36 2c 2d 33 2e 38 34 32 31 30 34
tab 0, row 14, @0x1d15
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 10
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 39 31 31 33 2c 2d 33 2e 38 34 32 31 34 34
tab 0, row 15, @0x1cea
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 11
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 32 39 39 34 36 2c 2d 33 2e 38 34 32 31 34 31
tab 0, row 16, @0x1cbf
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 12
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 33 30 31 37 39 2c 2d 33 2e 38 34 32 31 32 35
tab 0, row 17, @0x1c94
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 13
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 33 30 32 39 36 2c 2d 33 2e 38 34 32 32 30 39
tab 0, row 18, @0x1c6a
tl: 42 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 14
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [18]  35 33 2e 33 33 30 33 38 2c 2d 33 2e 38 34 32 33 35 33
tab 0, row 19, @0x1c3f
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 15
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 33 30 34 32 33 2c 2d 33 2e 38 34 32 35 34 39
tab 0, row 20, @0x1c14
tl: 43 fb: --H-FL-- lb: 0x1  cc: 3
col  0: [ 2]  c1 16
col  1: [16]  e3 8d dd 12 9c af 2f ed e0 43 65 05 a8 c0 b4 73
col  2: [19]  35 33 2e 33 33 30 35 38 38 2c 2d 33 2e 38 34 33 35 31 32
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 6575 maxblk 6575