配列変数
配列は入力、出力およびローカルのFormula変数に使用できます。 配列変数には日付、数値またはテキスト値を格納できます。 配列はPL/SQL index-by表に似ています。
配列索引
配列索引について、いくつかの留意事項があります。
-
索引の型はテキストまたは数値のいずれかです。
-
テキスト索引は一意の大文字です。
-
索引値の連番に抜けがあっても構いません。
-
数値の索引に小数部がある場合は切り捨てられます。
-
索引内の配列は前方および後方からの反復が許可されます。
配列データ型
配列タイプはDATA_TYPE_INDEX_TYPEとして指定します。 配列のデータ型は次のとおりです。
-
NUMBER_NUMBER
-
NUMBER_TEXT
-
DATE_NUMBER
-
DATE_TEXT
-
TEXT_NUMBER
-
TEXT_TEXT
配列使用に関するルール
Formula関数は配列を返すことも、配列パラメータを受け取ることもできません。 コンテキストを配列タイプにすることはできません。 存在しない索引の配列値を参照しようとすると、Formula実行エラーが返されます。 ただし、存在しない索引の配列値は削除できます。
配列メソッド
配列メソッドでは、先頭および最後の索引を取得でき、次または前の索引も取得できます。 これらのメソッドは索引のデータ型を返します。 これらのメソッドでは、目的の索引が存在しない場合のデフォルト値を指定できます。 配列メソッドを使用して、索引が存在するかどうかを判断できます。
配列メソッド構文は、配列リテラル値では直接機能しません。 たとえば、EMPTY_DATE_NUMBER.COUNTのような構造は使用できません。
配列メソッドのリストを、その説明および使用例とともに次に示します。
配列メソッド |
説明 |
使用例 |
---|---|---|
<name> [ <index value> ] |
索引の値を取得します。 |
V = A[1] |
<name> . FIRST( <default value> ) |
配列の最初の索引を取得します。 配列が空の場合はデフォルト値が返されます。 |
I = A.FIRST(-1) |
<name> . LAST( <default value> ) |
配列の最後の索引を取得します。 |
L = B.LAST(' ') |
<name> . EXISTS( <index value> ) |
索引に値が存在するかどうかの条件チェック。 配列が空の場合はデフォルト値が返されます。 |
IF A.EXISTS(1) THEN |
<name> . NEXT( <index value> , <default index value> ) |
索引位置を指定して、次の索引を取得します。 次の索引が存在しない場合はデフォルト値が返されます。 |
N = A.NEXT(1) |
<name> . PRIOR( <index value> , <default index value> ) |
索引位置を指定して、前の索引を取得します。 前の索引が存在しない場合はデフォルト値が返されます。 |
P = B.PRIOR('Two') |
<name> , COUNT |
配列エレメントをカウントする数値メソッド。 |
C = A.COUNT |
<name , DELETE( <index value> ) |
索引位置のエレメントを削除します。 |
B.DELETE('three') |
<name> , DELETE() |
すべてのエレメントを削除します。 |
B.DELETE() |
配列内の反復
この例で、AはNUMBERの索引を持つ配列変数です。-1234という索引はAでは無効なため、これをFIRSTおよびNEXTの呼出しで索引が見つからないときのデフォルト値として使用します。
/* -1234 is not a valid index for A in this instance, so use as default. */
NI = A.FIRST(-1234)
WHILE A.EXISTS(NI) LOOP
(
VA = A[NI] /* Do some processing with element at index NI. */
NI = A.NEXT(NI,-1234) /* Go to next index. */
)
この例で、BはTEXTの索引を持つ配列変数です。-1234という索引はBでは無効なため、これをFIRSTおよびNEXTの呼出しで索引が見つからないときのデフォルト値として使用します。
/* 'No Index' is not a valid index for A in this instance, so use as default. */
TI = B.FIRST('No Index')
WHILE B.EXISTS(TI) LOOP
(
VB = B[TI] /* Do some processing with element at index TI. */
TI = B.NEXT(TI, 'No Index') /* Go to next index. */
)
The following example iterates backwards from through an array C with a NUMBER inde.
/* -1234 is not a valid index for C in this instance, so use as default. */
NI = C.LAST(-1234)
WHILE C.EXISTS(NI) LOOP
(
VC = C[NI] /* Do some processing with element at index NI. */
NI = C.PRIOR(NI,-1234) /* Go to prior index. */)