次に、ArrayTransformsOffフラグがYに設定されている場合のARRAYデータ型の値の例を示します。 これらの例は、最も一般的に使用されるODBC/.NETおよびJDBCの組み合わせに焦点を合わせています。
- UDTTransformsOffの設定はY、PeriodStructOnの設定はY、またArrayTransformsOffの設定はY (この例ではYYY)
- UDTTransformsOffの設定はN、PeriodStructOnの設定はN、またArrayTransformsOffの設定はY (この例ではNNY)
例1: NULL構成要素を1つ含む1次元配列
/*Oracle-compatible and TD syntax respectively: */ Create Type intarray as VARRAY(3) OF Int; Create Type intarray as Int Array[3]; Create Table tab1 (id int, phonenumber intarray); Ins into tab1(10, NEW intarray(111222333, NULL, 123456789)); Sel phonenumber from tab1;
YYYとNNYのどちらの場合も、SELECTクエリーのデータ パーセルに含まれるパーセル本体フィールドの内容は次のようになります。
- NULL標識ビットは(n+7)/8 = (1+7)/8 = 1バイトになり、"00000000"と表現されます。
- 長さフィールドは2バイトのSMALLINTの17になります。
- 現在のカーディナリティ フィールドは、4バイトの符号無し整数の3になります。
- Elements-Null-Indicatorビットは、(3+7)/8= 1バイトになり、"01000000"と表現されます(2番目の構成要素がNULLであるため)。
- 配列構成要素のデータは、整数111222333に、ダミーのNULL値の整数0と整数の123456789を続けたものの2進表現になります。
例2: UDT要素型を含む1次元配列
この例では、NULL属性を持つUDT要素型の1次元配列を示します。
CREATE TYPE employee AS (name VARCHAR(10), employee_id INTEGER) ...; /*Oracle-compatible and TD syntax respectively: */ CREATE TYPE emparray AS VARRAY(20) OF employee; CREATE TYPE emparray AS employee ARRAY[20]; Create Table tab2 (dept_no int, dept_emps emparray); Ins into tab2(10, NEW emparray (NEW employee('Mike', NULL), NEW employee('Mark', 101))); Sel dept_emps from tab2;
YYYの場合、SELECTクエリーのデータ パーセルに含まれるパーセル本体フィールドの内容は次のようになります。
- NULL標識ビットは(n+7)/8 = (1+7)/8 = 1バイトになり、"00000000"と表現されます。
- 長さフィールドは2バイトのSMALLINTの25になります。
- 現在のカーディナリティ フィールドは、4バイトの符号無し整数の2になります。
- Elements-Null-Indicatorビットは、(3+3+7)/8= 1バイトになり、"00100000"と表現されます(最初の構成要素の2番目の属性がNULLであるため)。
- 配列構成要素のデータは、文字列'Mike'に、ダミーのNULL値の整数0、文字列'Mark'と整数の101を続けたものの2進表現になります。
NNYの場合、NEW employee ('Mike', NULL)が'Mike-NULL'に変換され、NEW employee ('Mark', 101)が'Mark-101'に変換されると仮定すると、SELECTクエリーのデータ パーセルに含まれるパーセル本体フィールドの内容は次のようになります。
- NULL標識ビットは(n+7)/8 = (1+7)/8 = 1バイトになり、"00000000"と表現されます。
- 長さフィールドは2バイトのSMALLINTの26になります。
- 現在のカーディナリティ フィールドは、4バイトの符号無し整数の2になります。
- Elements-Null-Indicatorビットは(2+7)/8= 1バイトになり、"00000000"と表現されます。
- 配列構成要素のデータは、文字列'Mike-NULL'に文字列'Mark-101'を続けたものの2進表現になります。
例3: NULL構成要素を1つ含む多次元配列
/*Oracle-compatible and TD syntax respectively: */ Create Type TwoD_intarray as VARRAY(2)(2) OF Integer; Create Type TwoD_intarray as Integer Array[2][2]; Create Table tab3 (id int, simulation TwoD_intarray); Ins into tab3(10, NEW TwoD_intarray(111222333, 123456789, NULL, 777777777)); Sel simulation from tab3;
YYYとNNYのどちらの場合も、上記のクエリーのデータ パーセルに含まれるパーセル本体フィールドの内容は次のようになります。
- NULL標識ビットは(n+7)/8 = (1+7)/8 = 1バイトになり、"00000000"と表現されます。
- 長さフィールドは2バイトのSMALLINTの21になります。
- 現在のカーディナリティ フィールドは、4バイトの符号無し整数の4になります。
- Elements-Null-Indicatorビットは(4+7)/8= 1バイトになり、"00100000"と表現されます。
- 配列構成要素のデータは、整数111222333に、整数123456789、ダミーのNULL値の整数0と整数777777777を続けたものの2進表現になります。