アプリケーション関連システム変数

このドキュメントでは、次のトピックについて説明します。


*APPLIC-ID

フォーマット/長さ: A8
内容変更の可否: 不可

このシステム変数には、ユーザーが現在ログオンしているライブラリの ID が格納されます。

*APPLIC-NAME

フォーマット/長さ: A32
内容変更の可否: 不可

Natural Security 環境の場合

Natural Security がインストールされている場合、ユーザーがログオンしているライブラリの名前が入ります。ユーザーが特別リンク経由でログオンしている場合は、代わりにリンク名が入ります。Natural Security がインストールされていない場合、このシステム変数には名前 SYSTEM が含まれています。

ユーザーが特別リンク経由でログオンしているかどうかに関係なく *APPLIC-NAME に常にライブラリ名が入るように、標準オプション Set *APPLIC-NAME always to library name を設定できます。『Natural Security』ドキュメントの「Set *APPLIC-NAME always to library name」を参照してください。

*COM

フォーマット/長さ: A128
内容変更の可否:

このシステム変数には、画面ウィンドウの外側のデータを処理するために使用できるコミュニケーションエリアを指定します。

通常、ウィンドウがアクティブな場合、ウィンドウの外側の画面にデータを入力することはできません。ただし、変更可能なフィールドとして *COM がマップに含まれている場合は、ウィンドウが画面上に表示されていても、このフィールドにデータを入力することができます。*COM の内容に応じて、追加の処理を実行できます。これにより入力フィールドを持つウィンドウがアクティブな場合でも、常にユーザーがコマンド行にデータを入力できるユーザーインターフェイスを実装できます。

注意:
*COM は、変更可能なフィールドとして INPUT ステートメントで使用できますが、入力フィールドとしてではなく、システム変数として扱われます。つまり、*COM フィールドの入力に対しては、大文字変換などの入力処理はまったく行われず、入力されたままの状態で受け入れられます。一度 INPUT ステートメントで *COM が画面に表示されると、後続の INPUTREINPUT ステートメントでは *COM の現在の内容が毎回表示されます。

以下の項目も参照してください。

*CONVID

フォーマット/長さ: I4
内容変更の可否:

このシステム変数には、現在の会話型リモートプロシージャコール(RPC)の会話 ID が格納されます。この ID は OPEN CONVERSATION ステートメントによって設定されます。

OPEN CONVERSATION ステートメントで、クライアントは 1 つのサーバープロセス内の多数のサービス(サブプログラム)を実行する排他使用のためのサーバーを取得することができます。この排他使用を会話といいます。OPEN CONVERSATION ステートメントを使用して会話を開き、この会話で起動するサブプログラムを指定します。OPEN CONVERSATION ステートメントを実行するとき、会話を識別するユニーク ID をシステム変数 *CONVID に割り当てます。

同時に複数の会話を開くことができます。開いている 1 つの会話から別の開いている会話に切り換えるには、ユーザーが、対応する会話 ID を *CONVID に割り当てます。

Natural RPC の詳細については、『Natural RPC(リモートプロシージャコール)』ドキュメントを参照してください。

*COUNTER (r)

フォーマット/長さ: P10
内容変更の可否:

このシステム変数には、FINDREADHISTOGRAM、または PARSE ステートメントで開始した処理ループに入った回数が格納されます。

*COUNTER の後の (r) 表記FINDREADHISTOGRAM または PARSE ステートメントラベルまたはソースコード行番号を示します。(r) が指定されていない場合は、*COUNTER は現在アクティブな処理ループに入った回数を示します。

*COUNTER は、WHERE 節に指定された条件でレコードが除外された場合は増加しません。*COUNTERは、ACCEPT/REJECT ステートメントでレコードが除外された場合は増加します。

*CPU-TIME

フォーマット/長さ: I4
内容変更の可否: 不可

*CPU-TIME には現在 Natural の処理で使用した CPU 時間(10 ms 単位)が含まれます。

*CURRENT-UNIT

フォーマット/長さ: A32
内容変更の可否: 不可

このシステム変数には、現在実行されているユニットの名前が格納されます。次の場合があります。

  • オブジェクトタイプが"ファンクション"の場合はファンクション名。

  • インラインサブルーチンが実行された場合はインラインサブルーチン名。

  • オブジェクトタイプが"サブルーチン"の場合は外部サブルーチン名。「*SUBROUTINE」も参照してください。

  • 上記以外のすべてのオブジェクトタイプ(プログラム、サブプログラム、マップ、ダイアログなど)の場合はオブジェクト名。「*PROGRAM」も参照してください。

*CURRENT-UNIT の内容は常に大文字です。

*DATA

フォーマット/長さ: N3
内容変更の可否: 不可

このシステム変数には、次の INPUT ステートメントで入力データとして使用できる Natural スタック内のデータ要素数が格納されます。スタックが空である場合、*DATA には 0 が格納されます。-1 の値は、スタック内の次の要素がコマンドか Natural トランザクション名であることを示します。

STACK ステートメント実行時の IA(入力割り当て文字)および ID(入力デリミタ文字)Natural プロファイル/セッションパラメータ指定は *DATA 値を決定するために使用されます。

*ERROR-LINE

フォーマット/長さ: N4
内容変更の可否: 不可

このシステム変数には、エラーが発生したステートメントのソースコード行番号が格納されます。

レベル 1 のプログラムが実行されたとき、*ERROR-LINE0 にリセットされます。

*ERROR-NR

または、*ERROR を指定できます。

フォーマット/長さ: N7
内容変更の可否:

ON ERROR 条件が発生したエラーのエラー番号です。

0~9999 の範囲内のエラー番号だけがサポートされます。

通常、*ERROR-NR はエラー条件に入ったときの Natural システムエラー番号を持っていますが、REINPUT WITH TEXT *nnnn ステートメントが実行された場合、*ERROR-NR にはアプリケーション指定のメッセージ番号 nnnn が挿入されます。

Natural プログラム内でこのシステム変数の内容を変更できますが、ON ERROR ステートメントブロック内ではできません。

レベル 1 のプログラムが実行されたとき、*ERROR-NR0 にリセットされます。

*ERROR-TA

フォーマット/長さ: A8
内容変更の可否:

このシステム変数には、エラー条件が発生したときに制御を受け取るエラートランザクションプログラムの名前が格納されます。

詳細については、『プログラミングガイド』の「エラートランザクションプログラムの使用」を参照してください。

*ETID

フォーマット/長さ: A8
内容変更の可否: 不可

このシステム変数には、現在の Adabas トランザクションデータの識別子が格納されます。デフォルト値は次のいずれかになります。

  • Natural プロファイルパラメータ ETID の値

  • アクティブなユーザーのセキュリティプロファイルの値(Natural Security 環境にのみ適用)

*ISN (r)

フォーマット/長さ: P10
内容変更の可否:

このシステム変数には、FINDREAD ステートメントで開始した処理ループ内で現在処理中のレコードの Adabas 内部シーケンス番号(ISN)が格納されます。

*ISN の後の (r) 表記FINDREAD を発行したステートメントのラベルまたはステートメント番号を示します。(r) を指定しない場合、*ISN は現在アクティブな処理ループ内で現在処理中のレコードの ISN を示します。

HISTOGRAM ステートメントの場合、*ISN は最後に読み込まれたディスクリプタ値のオカレンス番号を持ちます(ディスクリプタがピリオディックグループ内に存在しない場合、*ISN = 0)。

データベース固有の情報:

SQL データベース *ISN は使用できません。
Tamino *ISN には XML オブジェクト ID が含まれます。

*LBOUND

フォーマット/長さ: I4
内容変更の可否: 不可

*LBOUND には、指定した次元(1、2、3)または全次元(* 表記)の配列の現在の下限(添字の値)が含まれます。

構文:

*LBOUND (operand1 [,dim])

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1     A     A U N P I F B D T L C G O ×

operand1 は、下限が指定される配列です。配列のインデックス表記はオプションです。各次元でインデックス表記として使用できるのは、全範囲を示す表記 * のみです。

dim は、現在の下限が返される次元番号です。

dim =

1
2
3
*

次元が指定されない場合、第 1 次元の下限が返されます。

1、2、または 3 が指定された場合、第 1 次元、第 2 次元、または第 3 次元の下限が返されます。

* が指定されると、定義されたすべての次元(下記参照)の下限が返されます。

  • 1 次元配列の場合は 1

  • 2 次元配列の場合は 2

  • 3 次元配列の場合は 3

X-array が割り当てられておらず、この X-array の指定された次元の下限が変更可能なインデックス範囲である場合(インデックス定義内にアスタリスク(*)文字で表されている場合)、指定された次元の下限は未定義で、*LBOUND にアクセスするとランタイムエラーが発生します。ランタイムエラーを避けるために、次のように *OCCURRENCE を使用して検出件数がゼロかどうかを確認できます。

DEFINE DATA LOCAL
  1 #XA(A5/1:*)
END-DEFINE
IF *OCCURRENCE (#XA) NE 0 AND *LBOUND(#XA) > 10 
  THEN ...

例:

DEFINE DATA LOCAL
  1 #I  (I4)
  1 #J  (I4/1:3)
  1 #XA (A5/10:*,20:*)
END-DEFINE
#I  := *LBOUND(#XA)       /* lower bound of 1st dimension is 10 
#I  := *LBOUND(#XA,1)     /* lower bound of 1st dimension is 10
#I  := *LBOUND(#XA,2)     /* lower bound of 2nd dimension is 20
#J(1:2):= *LBOUND(#XA,*)  /* lower bound of all dimensions
                          /* #J(1) is 10 and #J(2) is 20
END

*UBOUND」および「*OCCURRENCE」も参照してください。

*LENGTH (field)

フォーマット/長さ: I4
内容変更の可否: 不可

このシステム変数は、ダイナミック変数として定義されたフィールドの現在使用されている長さをコード単位で返します。A および B フォーマットの場合は、1 つのコード単位のサイズは 1 バイトです。U フォーマットの場合は、1 つのコード単位のサイズは 2 バイト(UTF-16)です。*LENGTH(field) はダイナミック変数にのみ有効です。

プログラミングガイド』の「ダイナミック変数の現在の値スペース」も参照してください。

*LEVEL

フォーマット/長さ: N2
内容変更の可否: 不可

このシステム変数には、現在アクティブなプログラム、サブプログラム、外部サブルーチン、マップ、ヘルプルーチン、ダイアログのレベル番号が格納されます。レベル 1 はメインプログラムです。ランタイム時により高いレベル(最大 = 512)が発生した場合、*LEVEL の内容は 99 になります。

*LEVEL はインラインサブルーチンには適用されません。

プログラミングガイド』の「エラートランザクションプログラムの使用」も参照してください。

*LIBRARY-ID

フォーマット/長さ: A8
内容変更の可否: 不可

このシステム変数には、現在使用中の Natural ライブラリ ID(ログオン時にLOGON コマンドでユーザーが指定します)が格納されます。

変数 *APPLIC-ID と同義です。

*LINE

フォーマット/長さ: I4
内容変更の可否: 不可

Natural オブジェクト内で現在実行されている行番号が含まれます。

*LINEX

フォーマット/長さ: A100
内容変更の可否: 不可

現在実行されているステートメントの行番号と、使用されている INCLUDE レベルの行番号すべてを返します。

(コピーコード内ではなく)プログラムのメインソースで使用されると、参照されている行の番号のみが返されます。この場合、データは *LINE によって返されるものと同じですが、フォーマットは(A100)です。

*LINEX が(ネストされた)INCLUDE 構造で使用されている場合、最初の INCLUDE から最後の INCLUDE までのすべての行番号とステートメントの行番号が、スラッシュで区切られてこのフィールドに返されます。

例:

....
3200
3210 INCLUDE COPY01
     0010 ...
     0020 ...
     ....     
     0200 INCLUDE COPY02
          0010 ...
          0020 ...
          ....
          0050 PRINT *LINEX

PRINT ステートメントによって生成される出力 3210/0200/0050 は、*LINEX が最初に参照された位置を正確に特定するために必要な完全な行番号パスを表します。

*LOAD-LIBRARY-ID

フォーマット/長さ: A8
内容変更の可否: 不可

このシステム変数には、現在実行されているオブジェクトがロードされたライブラリ ID が含まれています。

*NUMBER (r)

フォーマット/長さ: P10
内容変更の可否:

このシステム変数には次のいずれかが含まれています。

  • FIND ステートメントの結果(WITH 節の結果)として選択されたレコード件数。

  • HISTOGRAM ステートメントの結果として選択された値の数。

*NUMBER の後の (r) 表記は、関連するステートメントのステートメントラベルまたはソースコード行番号を示します。(r) が指定されていない場合、*NUMBER は最も内側のアクティブな FIND または HISTOGRAM 処理ループをデフォルトで自動的に参照します。

注意:
*NUMBERFIND ステートメントともに使用され、アクセスされた Adabas ファイルが Adabas 機能の Security By Value によって保護されていると、複数のレコードが見つかった場合、*NUMBER の値は 9999999999 になります。1 件のレコードが見つかった場合、*NUMBER には 1 が含まれます。レコードが見つからなかった場合、*NUMBER には 0 が含まれます。

データベース固有の情報:

SQL データベース SQL データベースの場合、WHERE 節のない FIND NUMBER または HISTOGRAM ステートメントで使用すると、*NUMBER には見つかった行数のみが格納されます。それ以外の場合は、*NUMBER の値には見つかった行数は含まれません。*NUMBER は、行が見つからなかった場合は 0、見つかった場合は 0 以外の値となり、実際に見つかった行数ではありません。
Tamino WHERE 節のない FIND NUMBER ステートメントで使用すると、*NUMBER には見つかった行の数が格納されます。それ以外の場合、XML データベースに適用されると、*NUMBER の値には見つかった行数は含まれません。*NUMBER 行が見つからなかった場合は 0 になります。0 以外の値は、行が見つかったことを示します。ただし、その値は実際に見つかった行の数とは関係ありません。

WHERE 節を指定して FIND NUMBER を使用した場合は、検出された行数は *COUNTER で返されます。

*OCCURRENCE

フォーマット/長さ: I4
内容変更の可否: 不可

このシステム変数は、現在の配列のオカレンス数を提供します。これは、あらゆる種類の配列フィールドに適用でき、オカレンス数は固定または可変です。

内容:

  • オカレンス数が一定のスタティック配列

    例:(1:5)

  • 可変オカレンス数を持つ X-array

    例:(1:*)

  • 以下のように定義されるパラメータ配列:(1:V)

構文:

*OCCURRENCE (operand1 [,dim])

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1     A     A U N P I F B D T L C G O ×

operand1 は、オカレンス数が返される配列です。配列のインデックス表記はオプションです。各次元で使用できるのは、*OCC(#X(*)) または *OCC(#Y(*,*)) などの全範囲を示す表記 * のみです(提供されている場合)。

dim は、現在のオカレンス数が返される次元番号です。

dim =

1
2
3
*

説明

1 1 次元配列。dim が指定されない場合のデフォルトです。
2 2 次元配列。
3 3 次元配列。
* 対応する配列に定義されている全次元が適用されます。

パラメータデータエリアで、添字指定 (1:V) を使用して可変配列数の配列を定義することができます(DEFINE DATA ステートメントを参照)。このような配列の現在のオカレンス数はランタイムに決定されます。*OCCURRENCE を使用すると、現在の配列のオカレンス数を確認することができます。

例:

DEFINE DATA                 
PARAMETER                   
  1 #PARR  (I2/1:V)          
LOCAL                       
  1 #FARR  (I2/1:5)          
  1 #XARR1 (I2/1:*) 
  1 #XARR2 (I2/1:*,1:*)         
  1 #I     (I2)              
  1 #J     (I2)
END-DEFINE                  
FOR #I = 1 TO *OCC(#PARR)       /* Parameter array
  WRITE 2X #I               
END-FOR                     
FOR #I = 1 TO *OCC(#FARR)       /* Fixed array
  WRITE 4X #I               
END-FOR                     
EXPAND ARRAY #XARR1 TO (1:4)   
FOR #I = 1 TO *OCC(#XARR1)      /* X-Array
  WRITE 6X #I               
END-FOR                     
EXPAND ARRAY #XARR2 TO (1:3,1:4)   
FOR #I = 1 TO *OCC(#XARR2,1)    /* X-Array
  FOR #J = 1 TO *OCC(#XARR2,2)  
    WRITE 8X #I #J               
  END-FOR                       
END-FOR                     
END

プログラム例 OCC1P および OCC2P も参照してください。

X-array に関して、*OCCURRENCE は現在のオカレンス数を持ちます。

DEFINE DATA LOCAL
  1 #I   (I4)
  1 #J   (I4/1:3)
  1 #XA  (A5/1:*,1:*)
END-DEFINE
EXPAND ARRAY #XA TO (1:10,1:20)
#I      := *OCC(#XA)    /* #I=10 
#I      := *OCC(#XA,1)  /* #I=10
#I      := *OCC(#XA,2)  /* #I=20
#J(1:2) := *OCC(#XA,*)  /* #J(1)=10  #J(2)=20
END

*PAGE-EVENT

フォーマット/長さ: U(ダイナミック)
内容変更の可否: 不可

このシステム変数には、Natural for Ajax から提供される現在のイベント名が格納されます。

これは、PROCESS PAGE ステートメントを使用したリッチ GUI プログラミングで使用されます。詳細については、『Natural for Ajax』ドキュメントを参照してください。

*PAGE-LEVEL

フォーマット/長さ: I4
内容変更の可否: 不可

このシステム変数には、アクティブな PROCESS PAGE MODAL ステートメントブロックのレベルが格納されます。

アクティブな PROCESS PAGE MODAL がない場合、*PAGE-LEVEL の値は 0 です。

注意:
*PAGE-LEVEL の値が 0 より大きい場合、INPUTPRINTWRITE、または DISPLAY ステートメントでレポート 0 へ出力しないようにできます。

*PROGRAM

フォーマット/長さ: A8
内容変更の可否: 不可

このシステム変数には、現在実行中の Natural オブジェクトの名前が格納されます。

*REINPUT-TYPE

フォーマット/長さ: A16
内容変更の可否: 不可

このシステム変数は、アプリケーションが REINPUT または PROCESS PAGE UPDATE ステートメントを実行できる状態にあるかどうかを示します。

アプリケーションは、INPUT および PROCESS PAGE USING ステートメント(Natural for Ajax を実行している場合)を使用して、入力/出力処理を実行できます。特定の条件下では、アプリケーションがこれらの I/O ステートメントを REINPUT または PROCESS PAGE UPDATE ステートメントとともに返し、再実行することがあります。

このシステム変数によって返される値は、この位置でこのような再実行ステートメントが可能かどうかを示します。次のいずれかの値を返します。

説明
(空白) アプリケーションは、REINPUT ステートメントと PROCESS PAGE UPDATE ステートメントのいずれも実行できません。
REINPUT アプリケーションは REINPUT を実行できますが、PROCESS PAGE UPDATE ステートメントは実行できません。
UPDATE アプリケーションは PROCESS PAGE UPDATE を実行できますが、REINPUT ステートメントは実行できません。

*ROWCOUNT

フォーマット/長さ: I4
内容変更の可否: 不可

このシステム変数には、Natural SQL ステートメントの"検索済"DELETE"検索済"UPDATE、または INSERTselect-expression 付き)で、それぞれ削除、更新、または挿入された行の件数が含まれます。*ROWCOUNT は、これらのステートメントのうち、最後に実行されたものを常に参照します。

*STARTUP

フォーマット/長さ: A8
内容変更の可否:

このシステム変数にプログラム名が指定されている場合、Natural でコマンド入力プロンプト(NEXT プロンプトまたはダイレクトコマンド行/ウィンドウ)が表示される代わりに、そのプログラムが実行されます。

*STARTUP のアクティブ化

*STARTUP には、Natural Security で各ライブラリのセキュリティプロファイルに開始トランザクションとして入力されたプログラム名が含まれます(バッチモード以外)。『Natural Security』ドキュメントを参照してください。

開始トランザクションが指定されていない場合、あるいは Natural Security が使用されていない場合、*STARTUP にはプロファイルパラメータ STARTUP の値が含まれます(メインフレーム環境を除く)。

Natural プログラムで *STARTUP にプログラム名を割り当てることにより、常にその前の内容を上書きできます。

*STARTUP の非アクティブ化

*STARTUP に含まれるプログラムを非アクティブ化するには、次の手順を実行します。

  • 例えば、RESET *STARTUP ステートメントを使用して、*STARTUP システム変数を空白の値に設定します。

  • *STARTUP に含まれている起動プログラムを終了します。*STARTUP が使用されるコンテキストに応じて、それぞれプログラムループまたは Natural エラー NAT9969 を発生させることなく起動プログラムを適切に終了する方法がいくつかあります。

起動プログラムを定義する場合は、システム変数 *DEVICE*SERVER-TYPE および *SCREEN-IO に対して返される値がプログラムの結果に影響を与える可能性があることを考慮してください。例えば、意図しない結果を回避するために、次の手順を実行します。

  • バッチモードでは、起動プログラムに FETCH または STACK COMMAND ステートメントを含めます。これを行わなかった場合、プログラムループまたは Natural エラー NAT9969 が発生する可能性があります。

  • Natural 開発サーバー環境を NaturalONE からマッピングし、アクティブな *STARTUP を持つライブラリを選択した場合は、*STARTUP を非アクティブ化することで、起動プログラムが I/O を実行せず、正しく終了することを確認してください。アプリケーションプログラミングインターフェイス USR4218N を使用して、NaturalONE が現在のシステム環境かどうかを確認できます。

非セキュリティ環境または現在のライブラリにコマンドモードが禁止されていないセキュリティ環境で Natural 端末コマンド %% または同等のコマンドでコマンド入力モードを呼び出すと、起動メカニズムは中止します。この後、再び有効にするには、ライブラリにログオンしなおすか、*STARTUP にプログラム名を再度割り当てるプログラムを実行します。

Natural Security 環境での *STARTUP

コマンドモードが禁止された Natural Security 環境のライブラリでは、%% を入力すると *STARTUP 内の名前のプログラムが呼び出されます。

プログラムが存在するライブラリのセキュリティプロファイルで NEXT/MORE 行が許可されていない場合、スタートアッププログラムには FETCH または STACK COMMAND ステートメントが含まれている必要があります。『Natural Security』ドキュメントの「Library Maintenance」セクションの「セキュリティオプション」で説明されている対応するオプション設定も参照してください。

開始トランザクション(*STARTUP)による Natural ランタイムエラーが発生した場合、Natural のエラー処理によって開始トランザクションが再度実行される場合があります。このことにより、エラーループ状況が発生します。このようなループを回避するには、標準オプション Logoff in error case if *STARTUP is active を使用できます。『Natural Security』ドキュメントの「Logoff in Error Case if *STARTUP is Active」を参照してください。

*STEPLIB

フォーマット/長さ: A8
内容変更の可否: 不可

このシステム変数には、現在ユーザーがログオンしている Natural ライブラリに連結された STEPLIB ライブラリの名前が格納されます。

Natural Security がアクティブでない場合は、*STEPLIB には使用されるパラメータファイル内のプロファイルパラメータ STEPLIB で指定された *STEPLIB 名が含まれます。

Natural Security がアクティブな場合は、ライブラリのセキュリティプロファイルで値を定義できます。

注意:
*STEPLIB ライブラリのデータベース ID とファイル番号は、その名前から派生します。ライブラリ SYSTEM を除いて、SYSxxx の名前のライブラリは FNAT にあり、他のライブラリは FUSER にあるとみなされます。

*SUBROUTINE

フォーマット/長さ: A32
内容変更の可否: 不可

このシステム変数には、現在実行中の外部サブルーチンの名前が格納されます。*SUBROUTINE の内容は常に大文字です。

*THIS-OBJECT

フォーマット/長さ: HANDLE OF OBJECT
内容変更の可否: 不可

このシステム変数には、現在アクティブなオブジェクトに対するハンドルが格納されます。現在アクティブなオブジェクトは、*THIS-OBJECT を使用して、そのオブジェクト自体のメソッドを実行するか、または別のオブジェクトに対するこのオブジェクト自体への参照を渡します。

*THIS-OBJECT には、メソッドが実行されている場合は実際の値のみが含まれています。それ以外の場合は、NULL-HANDLE が含まれます。

*TYPE

フォーマット/長さ: A32
内容変更の可否: 不可

このシステム変数には、現在実行されている Natural オブジェクトのタイプが格納されます。

*TYPE の有効な値:

オブジェクトタイプ
PROGRAM プログラム
FUNCTION 関数
SUBPROGRAM Subprogram
SUBROUTINE サブルーチン
HELPROUTINE Helproutine
MAP マップ
ADAPTER アダプタ

*UBOUND

フォーマット/長さ: I4
内容変更の可否: 不可

*UBOUND には、指定した次元(1、2、3)または全次元(*表記)の配列の現在の上限(添字値)が含まれます。

構文:

*UBOUND (operand1 [,dim])

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1     A     A U N P I F B D T L C G O ×

operand1 は、上限が指定される配列です。配列のインデックス表記はオプションです。各次元でインデックス表記として使用できるのは、全範囲を示す表記 * のみです。

dim は、現在の上限が返される次元番号です。

dim =

1
2
3
*

次元が指定されない場合、第 1 次元の上限が返されます。

1、2、または 3 が指定された場合、第 1 次元、第 2 次元、または第 3 次元の上限が返されます。

* が指定されると、定義されたすべての次元(下記参照)の上限が返されます。

  • 1 次元配列の場合は 1

  • 2 次元配列の場合は 2

  • 3 次元配列の場合は 3

X-array が割り当てられておらず、この X-array の指定された次元の上限が変更可能なインデックス範囲である場合(インデックス定義内にアスタリスク(*)文字で表されている場合)、指定された次元の上限は未定義で、*UBOUND にアクセスするとランタイムエラーが発生します。ランタイムエラーを避けるために、次のように *OCCURRENCE を使用して検出件数がゼロかどうかを確認できます。

DEFINE DATA LOCAL
  1 #XA(A5/1:*)
END-DEFINE
IF *OCCURRENCE (#XA) NE 0 AND *UBOUND(#XA) > 10 
  THEN ...

例:

DEFINE DATA LOCAL
  1 #I  (I4)
  1 #J  (I4/1:3)
  1 #XA (A5/*:10,*:20)
END-DEFINE
#i  := *UBOUND(#XA)        /* upper bound of 1st dimension is 10 
#i  := *UBOUND(#XA,1)      /* upper bound of 1st dimension is 10
#i  := *UBOUND(#XA,2)      /* upper bound of 2nd dimension is 20
#j(1:2):= *UBOUND(#XA,*)   /* upper bound of all dimensions
                           /* (1st and 2nd)
                           /* #J(1) is 10 and #J(2) is 20

*LBOUND」および「*OCCURRENCE」も参照してください。