この例は、次のn-D ARRAY定義に基づいています。
/*Oracle-compatible and Teradata syntax respectively: */ CREATE TYPE myArray AS VARRAY(1:20)(1:20) OF integer; CREATE TYPE myArray AS integer ARRAY[1:20][1:20]; /*This function returns a range of element values */ void getMultiElement ( ARRAY_HANDLE *ary_handle, void *result, char sqlstate[6]) { long length; long bufferSize = sizeof_integer * 4; int *resultBuf; NullBitVecType *NullBitVector; array_info_t arrayInfo; int totalElements; long nullVecBufSize; bounds_t *arrayRange; bounds_t arrayScope[FNC_ARRAYMAXDIMENSIONS]; /* Call FNC_GetArrayTypeInfo first to find out the number of */ /* elements in the array. */ FNC_GetArrayTypeInfo(*ary_handle, &arrayInfo, arrayScope); nullVecBufSize = arrayInfo.totalNumElements; resultBuf = (int*)FNC_malloc(bufferSize); arrayRange = (bounds_t*)FNC_malloc(sizeof(bounds_t)*arrayInfo.numDimensions); /* Allocate a new NullBitVector to pass to FNC_GetArrayElements */ NullBitVector = (NullBitVecType*)FNC_malloc(nullVecBufSize); /* Set all members of NullBitVector to 0 */ memset(NullBitVector, 0, nullVecBufSize); /* Set values of arrayRange to correspond to the range [1:2][2:3] */ arrayRange[0].lowerBound = 1; arrayRange[0].upperBound = 2; arrayRange[1].lowerBound = 2; arrayRange[1].upperBound = 3; /* Get elements within the range [1:2][2:3] of myArray. */ FNC_GetArrayElements(*ary_handle, &arrayRange, resultBuf, bufferSize, NullBitVector, NullVecBufSize, &length); }
この例は、resultBufに格納された4つの整数の配列を返します。この4つの値は次のとおりです。
10 12 20 33
これらの値は、整数値としてresultBufの該当するエントリを取得することで直接アクセスできます。