このドキュメントでは、次のトピックについて説明します。
SELECT
ステートメントでは、任意の行数を取得するためのカーソル選択と、多くても 1 つの行を取得する非カーソル選択(単独 SELECT
)の両方がサポートされています。
SELECT ... END-SELECT
構造で、Natural は FIND
ステートメントと同じデータベースループ処理を使用します。
2 つの異なる構造が可能です。
一般セットの構文
SELECT selection INTO
|
table-expression | |||||||||
UNION |
[ALL ] [(]SELECT selection table-expression[)]
|
|||||||||
EXCEPT |
||||||||||
INTERSECT |
||||||||||
ORDER BY |
integer | ASC DESC
|
||||||||
column-reference | ||||||||||
expression | ||||||||||
statement
|
||||||||||
END-SELECT (ストラクチャードモードのみ)
|
||||||||||
LOOP (レポーティングモードのみ)
|
拡張セットの構文:
[WITH_CTE common-table-expression,...]
|
||||||||||||
SELECT selection INTO
|
parameter, |
|||||||||||
VIEW {view-name [correlation-name]},
|
||||||||||||
UNION |
[ALL ] [(]SELECT selection table-expression[)]
|
|||||||||||
EXCEPT |
||||||||||||
INTERSECT |
||||||||||||
ORDER BY |
integer | ASC DESC
|
||||||||||
column-reference | ||||||||||||
expression | ||||||||||||
INPUT SEQUENCE |
||||||||||||
[OPTIMIZE FOR integer ROWS ]
|
||||||||||||
WITH |
CS |
|||||||||||
RR |
||||||||||||
UR |
||||||||||||
RS |
||||||||||||
RS KEEP UPDATE LOCKS |
||||||||||||
RR KEEP UPDATE LOCKS |
||||||||||||
QUERYNO integer |
||||||||||||
FETCH FIRST |
1 | ROW |
ONLY |
|||||||||
integer | ROWS |
|||||||||||
[WITH HOLD ]
|
||||||||||||
[WITH RETURN ]
|
||||||||||||
WITH |
ASENSITIVE SCROLL |
[:]scroll_hv [GIVING [:] sqlcode
|
||||||||||
INSENSITIVE SCROLL |
||||||||||||
SENSITIVE STATIC SCROLL |
||||||||||||
SENSITIVE DYNAMIC SCROLL |
||||||||||||
WITH ROWSET POSITIONING FOR |
[:] row_hv | ROWS |
ROWS_RETURNED [:] ret_row |
|||||||||
integer | ||||||||||||
[IF-NO-RECORDS-FOUND-clause] | ||||||||||||
statement
|
||||||||||||
END-SELECT (ストラクチャードモードのみ)
|
||||||||||||
LOOP (レポーティングモードのみ)
|
構文要素の説明 - 構文 1:
SELECT selection | FIND ステートメントと同様、カーソル選択は検索条件を基準に 1 つ以上のデータベーステーブルから行(レコード)のセットを選択するために使用します。 また、アプリケーションプログラムからのカーソル管理は必要なく、Natural によって自動的に処理されます。
詳細については、以下の「SELECT - カーソル指向」を参照してください。
|
---|---|
INTO | INTO 節は、選択の結果を格納するプログラム内のターゲットフィールドを指定するために使用します。 詳細と例については、以下の「INTO 節」を参照してください。
|
VIEW | INTO 節で 1 つまたは複数のビューを参照する場合は、selection で指定した項目数が、ビューに定義されているフィールド(カウントするグループフィールドではなく、再定義フィールドとインジケータフィールド)の数と一致する必要があります。 詳細と例については、以下の「VIEW 節」を参照してください。
|
table-expression | table-expression は、FROM 節とオプションの WHERE 節から成ります。 詳細と例については、以下の「table-expression」を参照してください。
|
UNION | UNION は、複数の select-expressions の結果を結合します。 詳細と例については、以下の「UNION を伴うクエリ」を参照してください。
|
ORDER BY | ORDER BY 節は、SELECT ステートメントの結果を特定の順序で整列します。 詳細と例については、以下の「ORDER BY 節」を参照してください。
|
IF NO RECORDS FOUND | IF NO RECORDS FOUND 節は、先行する SELECT ステートメントで指定した選択条件に一致するレコードがない場合に処理ループを開始するために使用します。 詳細については、以下の「IF NO RECORDS FOUND 節」を参照してください。
|
END-SELECT | SELECT ステートメントを終了するには、Natural の予約キーワード END-SELECT を使用する必要があります。
|
次の構文要素は SQL 拡張セットに含まれます。
OPTIMIZE FOR |
OPTIMIZE FOR 節:
この節は DB2 データベースにのみ有効です。 他のデータベースに使用すると、ランタイムエラーが発生します。 |
---|---|
WITH CS/RS/UR/... |
WITH CS/RS/UR/...節:
この節は DB2 データベースにのみ有効です。 他のデータベースに使用すると、ランタイムエラーが発生します。 |
QUERYNO |
QUERYNO 節:
この節は、現在はサポートされていないため無視されます。 |
FETCH FIRST |
FETCH FIRST 節:
この節は DB2 データベースにのみ有効です。 他のデータベースに使用すると、ランタイムエラーが発生します。 |
WITH HOLD |
WITH HOLD 節:
この節は現在サポートされていません。 使用すると、コンパイラエラーが発生します。 |
WITH RETURN |
WITH RETURN 節:
この節は現在はサポートされていません。 使用すると、コンパイラエラーが発生します。 |
WITH ... SCROLL |
WITH ... SCROLL 節:
この節は SQL 拡張セットに含まれます。 この節では、RDBMS のスクロール可能カーソルを有効にします。 スクロール可能カーソルには、 注意:
スクロール可能カーソルにより、カーソルがオープンされている限り、アプリケーションでカーソル位置の任意の行をいつでも位置決めできるようになります。 スクロール可能カーソルは、Sybase データベースではサポートされていません。 スクロール可能カーソルは、MS SQL Server DBLIB インターフェイスではサポートされていませんが、MS SQL Server ODBC インターフェイスに限ってサポートされています。 位置決めは scroll_hv の内容に基づいて行われます。 内容は、データベースに対する 詳細については、「SELECT - カーソル指向」を参照してください。 |
一般セットの構文
SELECT SINGLE
|
|||||||||||
selection INTO
|
parameter ,
|
table-expression | |||||||||
VIEW {view-name [correlation-name ]},
|
|||||||||||
[IF-NO-RECORDS-FOUND-clause] | |||||||||||
statement | |||||||||||
END-SELECT (structured mode only)
|
|||||||||||
LOOP (reporting mode only)
|
拡張セットの構文
SELECT SINGLE
|
|||||||||||
selection INTO
|
parameter ,
|
table-expression | |||||||||
VIEW {view-name [correlation-name ]},
|
|||||||||||
CS
|
|||||||||||
WITH
|
RR
|
||||||||||
UR
|
|||||||||||
[IF-NO-RECORDS-FOUND-clause] | |||||||||||
statement | |||||||||||
END-SELECT (structured mode only)
|
|||||||||||
LOOP (reporting mode only)
|
構文要素の説明 - 構文 2:
SELECT SINGLE | SELECT SINGLE ステートメントでは、非カーソル選択(単独 SELECT )の機能、つまり、カーソルを使用せずに多くても 1 つの行を取得する選択式がサポートされています。 これは位置決め UPDATE や位置決め DELETE ステートメントでは参照できません。
|
---|---|
INTO | INTO 節は、選択の結果を格納するプログラム内のターゲットフィールドを指定するために使用します。 詳細と例については、以下の「INTO 節」を参照してください。
|
VIEW | INTO 節で 1 つまたは複数のビューを参照する場合は、selection で指定した項目数が、ビューに定義されているフィールド(カウントするグループフィールドではなく、再定義フィールドとインジケータフィールド)の数と一致する必要があります。 詳細と例については、以下の「VIEW 節」を参照してください。
|
table-expression | table-expression は、FROM 節とオプションの WHERE 節から成ります。 詳細と例については、以下の「table-expression」を参照してください。
|
WITH CS/RR/UR |
WITH CS/RR/UR 節:
この節は DB2 データベースにのみ有効です。 他のデータベースに使用すると、ランタイムエラーが発生します。 |
IF NO RECORDS FOUND | IF NO RECORDS FOUND 節は、先行する SELECT ステートメントで指定した選択条件に一致するレコードがない場合に処理ループを開始するために使用します。 詳細については、以下の「IF NO RECORDS FOUND 節」を参照してください。
|
END-SELECT | SELECT ステートメントを終了するには、Natural の予約キーワード END-SELECT を使用する必要があります。
|
INTO
|
parameter ,
|
||
VIEW {view-name [correlation-name ]},
|
INTO
節は、選択の結果を格納するプログラム内のターゲットフィールドを指定するために使用します。 INTO
節では、DEFINE DATA
ステートメントで定義された個々の parameters または 1 つ以上のビューを指定できます。
全ターゲットフィールドは単一テーブルまたはジョイン処理でできた複数のテーブルから値を受け取ることができます(「ジョインクエリ」も参照)。
注意:
標準 SQL 構文では、INTO
節は非カーソル選択処理(単独 SELECT
)でのみ使用されるため、単一行を選択する場合にのみ指定できます。 ただし、Natural では、カーソル選択処理および非カーソル選択処理のどちらにも INTO
節を使用します。
selection はアスタリスク(*)のみでも構成できます。 標準選択式では、FROM
節に指定されたテーブル(複数可)の全列名のリストに対する省略形です。 ただし、同じ構文項目 SELECT *
は、Natural SELECT
ステートメントでは異なる意味になります。INTO
節にリストされた項目はすべて選択にも使用されます。 それらの名前は既存のデータベースの列名に対応させる必要があります。
例 1:
DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 AGE END-DEFINE ... SELECT * INTO NAME, AGE
例 2:
... SELECT * INTO VIEW PERS
上記の例は下記の例と同等です。
例 3:
... SELECT NAME, AGE INTO NAME, AGE
例 4:
... SELECT NAME, AGE INTO VIEW PERS
VIEW {view-name [correlation-name]},
|
INTO
節で 1 つまたは複数のビューを参照する場合は、selection で指定した項目数が、ビューに定義されているフィールド(カウントするグループフィールドではなく、再定義フィールドとインジケータフィールド)の数と一致する必要があります。
注意:
Natural ターゲットフィールドおよびテーブルの列は両方とも Natural DDM に定義されている必要があります。 ただし、割り当ては順序に従って行われるため、名前が異なっていてもかまいません。
ビュー使用の INTO
節の例:
DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 AGE END-DEFINE ... SELECT FIRSTNAME, AGE INTO VIEW PERS FROM SQL-PERSONNEL ...
ターゲットフィールド NAME
および AGE
は Natural ビューの一部であり、テーブルの列 FIRSTNAME
および AGE
の内容を受け取ります。
parameter |
個々のパラメータをターゲットフィールドとして指定する場合、パラメータの数とフォーマットは、対応する選択(上記)に指定された columns または scalar-expressions(あるいは両方)の数とフォーマットに一致する必要があります(詳細については、「スカラー式」を参照)。 例: DEFINE DATA LOCAL 01 #NAME (A20) 01 #AGE (I2) END-DEFINE ... SELECT NAME, AGE INTO #NAME, #AGE FROM SQL-PERSONNEL ... ターゲットフィールド |
---|---|
correlation-name |
複数のテーブルが連結(ジョイン)される 例: DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 FIRST-NAME 02 AGE END-DEFINE ... SELECT * INTO VIEW PERS A FROM SQL-PERSONNEL A, SQL-PERSONNEL B ... |
table-expression は、FROM
節とオプションの WHERE
節から成ります。 GROUP BY
および HAVING
節は指定できません。
例 1:
DEFINE DATA LOCAL 01 #NAME (A20) 01 #FIRSTNAME (A15) 01 #AGE (I2) ... END-DEFINE ... SELECT NAME, FIRSTNAME, AGE INTO #NAME, #FIRSTNAME, #AGE FROM SQL-PERSONNEL WHERE NAME IS NOT NULL AND AGE > 20 ... DISPLAY #NAME #FIRSTNAME #AGE END-SELECT ... END
例 2:
DEFINE DATA LOCAL 01 #COUNT (I4) ... END-DEFINE ... SELECT SINGLE COUNT(*) INTO #COUNT FROM SQL-PERSONNEL ...
詳細については、selection および table-expression を参照してください。
注意:
以降において、"SELECT ステートメント" は、UNION
演算と連結した複数の選択式で構成されるクエリ式全体の同義語として使用されます。
UNION
は、複数の select-expressions の結果を結合します。 各 select-expressions に指定された列は UNION
互換(数、タイプ、フォーマットが一致)である必要があります。
UNION
演算子に ALL
修飾子が明示的に指定されていないと、重複した余分な行は常に UNION
の結果から取り除かれます。 ただし、UNION
では、ALL
に代わって明示的に指定できる DISTINCT
オプションはありません。
例:
DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 AGE 02 ADDRESS (1:6) END-DEFINE ... SELECT NAME, AGE, ADDRESS INTO VIEW PERS FROM SQL-PERSONNEL WHERE AGE > 55 UNION ALL SELECT NAME, AGE, ADDRESS FROM SQL-EMPLOYEES WHERE PERSNR < 100 ORDER BY NAME ... END-SELECT ...
一般的に、任意の数の select-expressions を UNION
で連結できます。
INTO
節は、最初の select-expression にのみ指定する必要があります。
ORDER BY
節は、最後の select-expression の後に指定する必要があります。並べ替える列は名前でなく番号で識別する必要があります。
ORDER BY
|
integer | ASC
|
,
|
||||
column-reference | DESC
|
ORDER BY
節は、SELECT
ステートメントの結果を特定の順序で整列します。
各 ORDER BY
節には、結果テーブルの列を指定する必要があります。 ほとんどの ORDER BY
節で、column-reference(オプションで修飾された列名)、または列番号によって列を識別できます。 UNION
を指定したクエリでは、列は列番号で識別する必要があります。 列番号は、selection 内で左から右へ位置づけ、integer 値で示します。 この機能により、名前を持たない計算列に基づいて結果を整列できるようになります。
例:
DEFINE DATA LOCAL 1 #NAME (A20) 1 #YEARS-TO-WORK (I2) END-DEFINE ... SELECT NAME , 65 - AGE INTO #NAME, #YEARS-TO-WORK FROM SQL-PERSONNEL ORDER BY 2 ...
ORDER BY
節に指定する順序は昇順(ASC
)または降順(DESC
)です。 ASC
がデフォルトです。
例:
DEFINE DATA LOCAL 1 PERS VIEW OF SQL-PERSONNEL 1 NAME 1 AGE 1 ADDRESS (1:6) END-DEFINE ... SELECT NAME, AGE, ADDRESS INTO VIEW PERS FROM SQL-PERSONNEL WHERE AGE = 55 ORDER BY NAME DESC ...
詳細については、integer および column-reference を参照してください。
注意:
この節は実際には Natural SQL に属するものではありません。これは Natural 機能が SQL ループ処理に対して有効にされたことを表します。
IF NO [RECORDS ] [FOUND ]
|
||
ENTER
|
||
statement | ||
END - NOREC
|
IF NO [RECORDS ] [FOUND ]
|
||
ENTER
|
||
statement | ||
DO statement DOEND
|
IF NO RECORDS FOUND
節は、先行する SELECT
ステートメントで指定した選択条件に一致するレコードがない場合に処理ループを開始するために使用します。
指定した選択条件に一致するレコードがない場合、IF NO RECORDS FOUND
節により、"空" のレコードを使用して処理ループが 1 回実行されます。 これが望ましくない場合は、IF NO RECORDS FOUND
節に ESCAPE BOTTOM
ステートメントを指定します。
IF NO RECORDS FOUND
節に 1 つ以上のステートメントを指定すると、処理ループに入る直前にそのステートメントが実行されます。 ループに入る前に実行するステートメントがない場合は、キーワード ENTER
を使用する必要があります。
注意:
SELECT
ステートメントの結果セットが単一行の NULL 値で構成される場合、IF NO RECORDS FOUND
節は実行されません。 この状況は、選択リストが列に対する集積関数 SUM
、AVG
、MIN
、MAX
の 1 つで単独に構成され、集積関数で使用するセットが空の場合に起こることがあります。 このような方法で集積関数を使用するときは、IF NO RECORDS FOUND
節を使用せずに、対応する空値インジケータフィールドの値をチェックする必要があります。
IF NO RECORDS FOUND
節内のステートメントで他の値の割り当てが行われない限り、Natural は現在のループで指定されたファイルを参照するすべてのデータベースフィールドをリセットして空にします。
Natural システム機能は、IF NO RECORDS FOUND
節の結果として処理用に作成される空のレコードに対して 1 回評価されます。
ジョインとは複数のテーブルからデータを取得するクエリです。 参照されるテーブルはすべて FROM
節に指定する必要があります。
例:
DEFINE DATA LOCAL 1 #NAME (A20) 1 #MONEY (I4) END-DEFINE ... SELECT NAME, ACCOUNT INTO #NAME, #MONEY FROM SQL-PERSONNEL P, SQL-FINANCE F WHERE P.PERSNR = F.PERSNR AND F.ACCOUNT > 10000 ...
ジョインは常に FROM
節にリストされたテーブルのデカルト積を形成し、このデカルト積から WHERE
節に指定されたジョイン条件を満たさない行をすべて削除します。
テーブル名が長すぎる場合、 Correlation-names を使用して書き込みを保存できます。 選択リストに指定された列が、連結(ジョイン)される複数のテーブルに存在するとき、同じ名前のどの列を選択するかを識別するために Correlation-names を使用する必要があります。
Natural FIND
ステートメントと同様、カーソル指向の SELECT
ステートメントは検索条件を基準に 1 つ以上の DB2 テーブルから行(レコード)のセットを選択するために使用します。 データベースループが開始されるため、ループは LOOP
(レポーティングモード)または END-SELECT
ステートメントで閉じる必要があります。 この構造では、Natural は FIND
ステートメントの場合と同じ処理ループを使用します。
また、アプリケーションプログラムからのカーソル管理は必要なく、Natural によって自動的に処理されます。
以下に参考情報を示します。
[OPTIMIZE FOR integer ROWS ]
|
OPTIMIZE FOR integer ROWS
節は、結果テーブルから取得する行の数(integer)を前もって DB2 に知らせるために使用します。 この節を使用しない場合、DB2 では結果テーブルのすべての行が取得されると仮定し、それに応じて最適化を行います。
このオプションの節は、選択される行の数を把握している場合に役立ちます。実際に選択される行数が integer 値(0~2147483647)を超えない場合、integer の行を最適化することでパフォーマンスが向上します。
例:
SELECT name INTO #name FROM table WHERE AGE = 2 OPTIMIZE FOR 100 ROWS
WITH
|
CS
|
この WITH
節では、ステートメントを実行するときの分離レベルを明示的に指定できます。 次のオプションを使用できます。
オプション | 意味 |
---|---|
CS | カーソルの安定 |
RR | 繰り返し可能な読み込み |
RS | 読み込みの安定 |
RS KEEP UPDATE LOCKS | FOR UPDATE OF 節を指定している場合にのみ有効です。
読み込みの安定と更新ロックの保持です。 |
RR KEEP UPDATE LOCKS | FOR UPDATE OF 節を指定している場合にのみ有効です。
繰り返し可能な読み込みと更新ロックの保持です。 |
UR | 未コミットの読み込み |
WITH UR
は、テーブルが読み取り専用のときに SELECT
ステートメント内にのみ指定できます。 デフォルトの分離レベルは、ステートメントがバインドされるパッケージまたはプランの分離によって決定されます。 また、デフォルトの分離レベルは、結果テーブルが読み取り専用かどうかによっても変わります。 デフォルトの分離レベルについては、IBM
文献を参照してください。
注意:
また、このオプションは非カーソル選択にのみ有効です。
FETCH FIRST
|
1 integer |
ROWS ROW |
ONLY
|
FETCH FIRST
節では、フェッチする行の数を制限します。 ごく限られた数の行が必要な場合にこの節を使用すると、結果セットの規模が大きくなる可能性のあるクエリのパフォーマンスが向上します。
WITH
|
ASENSITIVE SCROLL INSENSITIVE SCROLL SENSITIVE STATIC SCROLL SENSITIVE DYNAMIC SCROLL
|
[:] scroll_hv | [GIVING |
[:] | sqlcode] |
Natural では、SQL のスクロール可能カーソルを利用できます。そのためには、WITH ASENSITIVE SCROLL
節、WITH SENSITIVE STATIC SCROLL
節、および SENSITVE DYNAMIC SCROLL
節を使用します。 スクロール可能カーソルにより、Natural アプリケーションで結果セット内の任意の行をランダムに位置決めできるようになります。 スクロール不可能なカーソルでは、データは上から下に順番に読み込むことしかできません。
ASENSITIVE
スクロール可能カーソルは、INSENSITIVE
(カーソルが READ-ONLY
の場合)または SENSITIVE DYNAMIC
(カーソルが READ-ONLY
でない場合)です。
INSENSITIVE
および SENSITIVE STATIC
スクロール可能カーソルでは一時的な結果テーブルを使用し、DB2 に TEMP データベースが必要になります(IBM の関連 DB2 文献を参照)。
INSENSITIVE SCROLL
は、位置決め UPDATE
または位置決め DELETE
処理に使用できないカーソルを表します。 また、INSENSITIVE SCROLL
カーソルは、一度オープンされると、その後に基本テーブルを対象に実行される UPDATE
、DELETE
、または INSERT
を反映しません。
SENSITIVE STATIC SCROLL
は、位置決め UPDATE
または位置決め DELETE
処理に使用できるカーソルを表します。 また、SENSITIVE STATIC SCROLL
カーソルは、基本テーブルの行の UPDATE
、DELETE
を反映します。 ただし、INSERT
処理は反映しません。
SENSITIVE DYNAMIC
スクロール可能カーソルは、カーソルがオープンされている間、基本テーブルを対象に実行される UPDATE
、DELETE
、および INSERT
を反映します。
以下に参考情報を示します。
変数 scroll_hv は英数字にする必要があります。
変数 scroll_hv では、データベース処理ループの 1 回の実行でフェッチする結果テーブルの行を指定します。 scroll_hv の内容は、データベース処理ループサイクルが実行されるたびに評価されます。
INSENSITIVE |
CURRENT
|
|||||||||
ABSOLUTE |
[+ | - ] integer |
オプション | 説明 |
---|---|
CURRENT | 現在の行を(再度)フェッチします。 |
FIRST | 最初の行をフェッチします。 |
LAST | 最後の行をフェッチします。 |
NEXT | 現在の行の次の行をフェッチします。 これはデフォルト値です。 |
PRIOR | 現在の行の前の行をフェッチします。 |
+/- integer |
フェッチする行の位置を 整数の前にプラス記号(+)またはマイナス記号(-)を入力します。 デフォルト値はプラス(+)です。 |
ABSOLUTE |
+/- integer との接続でのみ適用されます。 行をフェッチする結果セット内の絶対位置として integer を使用します。 |
RELATIVE |
+/- integer との接続でのみ適用されます。 行をフェッチする結果セット内の現在の位置への相対位置として integer を使用します。 |
特別な RDBMS システムにはいくつかの制限があります。
DB2 ではキーワード CURRENT
はサポートされていません。
SELECT FOR UPDATE
ループにおいては、DB2 ではスクロールオプションとして NEXT
のみがサポートされています。
MS SQL Server(ODBC インターフェイス)ではキーワード CURRENT
はサポートされていません。
Adabas D では RELATIVE
スクロールはサポートされていません。
GIVING [:] sqlcode
の指定はオプションです。 指定する場合、Natural 変数 [:] sqlcode
のフォーマットは I4 にする必要があります。 この変数の値は、基準となる FETCH
処理の DB2 SQLCODE から返されます。 これにより、スクロール可能カーソルがオープンされている間に発生した各種ステータスにアプリケーションで対応できるようになります。 SQLCODE で示される最も重要なステータスコードを次の表に示します。
SQLCODE | 説明 |
---|---|
0 | FETCH 処理は正常に完了しました。データが返されました(ただし、オプション BEFORE または AFTER を指定した FETCH を除く)。
|
+100 | 行は見つかりません。カーソルはオープンされたままです。データは返されませんでした。 |
-1 | 行に対する FETCH 試行中の一般的なエラーです。
|
GIVING [:] sqlcode
を指定する場合、アプリケーションで各種ステータスに対応できる必要があります。 端末 I/O なしで 5 回連続して SQLCODE +100 になった場合、アプリケーションループを回避するために、NDB ランタイムから Natural エラー
NAT3296 が発行されます。 アプリケーションでは、ESCAPE
ステートメントを実行して処理ループを終了できます。
GIVING [:] sqlcode
を指定しない場合、SQLCODE 0 および SQLCODE +100 を除き、各 SQLCODE によって Natural エラー NAT3700 が生成され、処理ループが終了します。 SQLCODE +100(行は見つかりません)では処理ループが終了します。
Natural システムライブラリ SYSDB2 内のプログラム例 DEM2SCRL も参照してください。