!--a11y-->

リリース 4.0 でのネイティブ SQL インタフェースの主な新機能は、以下のとおりです。
キ 複数のデータベースへの同時接続が可能 (非 SAP データベースを含む)
キ ストアドプロシージャ用にカーソルを使用
キ 非 SAP テーブルへのアクセス
キ Informix 用ネイティブ SQL 文が (ほぼ) すべて使用可能。サポートされていないネイティブ SQL 文は以下のとおりです。
全 SET ISOLATION LEVEL 命令は EXEC SQL - ENDEXEC 内だけでなく、たとえば同じデータベース接続でのオープン SQL など、後続の命令内にも継続されます。これがロックメカニズムに、悪影響を及ぼすことがあります。これを防止するため、分離レベルを DIRTY READ にリセットしてください。
また DBSL との比較ができませんので、ストアドプロシージャでは上記の命令を使用しないでください。
ネイティブ SQL とホスト変数を使用して Informix 内のマスタデータテーブルにアクセスする場合は、作業領域または LIKE 命令を使用してください。
非 SAP テーブルにアクセスする場合、ネイティブ SQL モジュールはABAP ディクショナリからの情報がなくても機能しますので、ABAP 変数のタイプとデータベース項目のタイプが適合していることを確認する必要があります。ネイティブ SQL モジュールは、ABAP で確保されているデータ型とメモリ領域を DBMS に開きます。これによって DBMS と直接読み書きを行うことができます。すなわちこのモジュールは多少の例外を除き、ESQL/C を使用しているのとまったく同様の働きをします。つまり、いくつかの変換は許されておらずエラーメッセージがトリガされ、丸めエラーや切詰めも起こり得ます。主要なデータ型の説明と Informix データベース用の変換については、 プログラマーズマニュアルに記載されています。
たとえばネイティブ SQL を使用して DATE 値をタイプ I の ABAP 変数に変換しようとしても、システムは変換を実行することができません。
ABAP 変数とInformix データベース項目のデータ型の間のさまざまなタイプの適合性について、以下に説明します。
ネイティブ SQL モジュールで許可されサポートされているすべてのデータ型変換を、一覧で示します。望ましいデータ型の組み合わせは、 ボールドで表記されています。
データ型の組み合わせが不当な場合は、ABAP ワークベンチのエラー処理が行われ、結果として起こりうる ABAP ショートダンプのエラーコードが表示されます。ただしこのコードは、リリースによって変更される可能性があります。
この一覧に記載のない、他のデータ型の組み合わせがどのように作用するかについての正式な説明はありません。
最初のセクションではネイティブ SQL (INSERT および UPDATE) を使用して、ABAP 変数を非 SAP データベーステーブルに保存する方法を説明します。2 番目のセクションではネイティブ SQL (SELECT) を使用して、外部データベーステーブルから ABAP 変数に読み込む方法を説明します。
ABAP 項目データ型:
キ 文字 C(n)
キ 数値テキスト N(n)
キ パック数値 P(m,d)
キ 整数 I
キ 浮動小数点数 F
キ 日付D
キ 時間T
キ 16 進数 X(n)
データベース列タイプ
キ char
キ decimal
キ money
キ smallint
キ float
キ double precision
R/3 リリース 4 での Informix ネイティブ SQL の使用
ネイティブ SQL を使用して ABAP 変数から値を保存します。
以下のテーブルはそれぞれ 1 つの ABAP データ型を表します。これはデータを保存したい ABAP 変数のデータ型です。
左の列は、外部データベーステーブルのデータベース項目の SQL データ型です。
右側は ABAP ワークベンチのリアクションです。
SQL データ型DECIMAL についての説明は、MONEY および NUMERIC のデータ型についてもあてはまります。
ABAP データ型 C は、ほとんどのデータベースで複写することができます。しかし、非 CHAR 項目があるときは、丸め、切詰め、書式エラーが発生しやすいので、長さ、書式、許容値範囲に注意しなければなりません。切詰めと丸めエラーは SQL エラーとして返されません。
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
ABAP データ値幅 > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 <= データベース列幅 |
OK |
|
|
varchar |
ABAP データ値幅 > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 <= データベース列幅 |
OK |
|
|
nchar |
ABAP データ値幅 > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 <= データベース列幅 |
OK |
|
|
text |
DELETE 命令、または WHERE 句のテキスト項目の場合 |
-615 |
|
それ以外の場合 |
OK |
|
|
byte |
|
-608 |
|
date |
ABAP データ値に有効なデータベース日付書式がない |
[undef] |
|
ABAP データ値のデータベース日付書式は有効だが、値範囲が間違っている |
-608 |
|
|
ABAP データ値に有効なデータベース日付書式がある |
OK |
|
|
datetime |
ABAP データ値に有効なデータベース日付時間書式がない |
-1262 |
|
ABAP データ値のデータベース日付時間書式は有効だが、値範囲が間違っている |
-1218 |
|
|
ABAP データ値に有効なデータベース日付時間書式がある |
OK |
|
|
interval |
ABAP データ値に有効なデータベース区間書式がない |
-1264 |
|
ABAP データ値に有効なデータベース区間書式がない |
-1263 |
|
|
ABAP データ値に有効なデータベース区間書式がある |
OK |
|
|
decimal |
ABAP データ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
-1226 |
|
|
非有効数字が消失 |
-1226 |
|
|
変換時の消失なし |
OK |
|
|
integer |
ABAP データ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
-1215 |
|
|
変換時の消失なし |
OK |
|
|
smallint |
ABAP データ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
-1215 |
|
|
変換時の消失なし |
OK |
|
|
float |
ABAP データ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
[round] |
|
|
非有効数字が消失 |
[round] |
|
|
変換時の消失なし |
OK |
|
|
smfloat |
ABAP データ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
[round] |
|
|
非有効数字が消失 |
[round] |
|
|
変換時の消失なし |
OK |
|
|
double precision |
ABAP データ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
[round] |
|
|
非有効数字が消失 |
[round] |
|
|
変換時の消失なし |
OK
|
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
ABAP 項目幅 > データベース列幅 |
[rtrunc] |
|
ABAP 項目幅 <= データベース列幅 |
ok |
|
|
varchar |
ABAP 項目幅 > データベース列幅 |
[rtrunc] |
|
ABAP 項目幅 <= データベース列幅 |
ok |
|
|
nchar |
ABAP 項目幅 > データベース列幅 |
[rtrunc] |
|
ABAP 項目幅 <= データベース列幅 |
ok |
|
|
text |
|
-608 |
|
byte |
|
-608 |
|
date |
|
-1218 |
|
datetime、 interval |
データベースの列タイプが 1 つの要素 (たとえば、datetime hour to hour) で構成されており ABAP 値範囲が有効 |
ok |
|
それ以外の場合 |
-1218,-1261 |
|
|
decimal |
変換時に数字が消失 |
-1226 |
|
変換時の消失なし |
ok |
|
|
integer |
変換時に数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
smallint |
変換時に数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
float |
変換時に数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
smallfloat |
変換時に有効数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
double precision |
変換時に有効数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
ABAP データ値幅 > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 <= データベース列幅 |
ok |
|
|
varchar |
ABAP データ値幅 > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 <= データベース列幅 |
ok |
|
|
nchar |
ABAP データ値幅 > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 <= データベース列幅 |
ok |
|
|
text |
|
-608 |
|
byte |
|
-608 |
|
date |
|
-1218 |
|
datetime、 interval |
データベースの列タイプが 1 つの要素 (たとえば、datetime hour to hour) で構成されており ABAP 値範囲が有効 |
ok |
|
それ以外の場合 |
-1218,-1261 |
|
|
decimal |
変換時に数字が消失 |
-1226 |
|
変換時の消失なし |
ok |
|
|
integer |
変換時に数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
smallint |
変換時に数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
float |
変換時に数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
smallfloat |
変換時に数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
double precision |
変換時に数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
変換時に数字が消失 |
-1207 |
|
変換時の消失なし |
ok |
|
|
varchar |
変換時に数字が消失 |
-1207 |
|
変換時の消失なし |
ok |
|
|
nchar |
変換時に数字が消失 |
-1207 |
|
変換時の消失なし |
ok |
|
|
text |
|
-608 |
|
byte |
|
-608 |
|
date |
|
-1218 |
|
datetime、 interval |
|
-1260 |
|
decimal |
変換時に数字が消失 |
-1226 |
|
変換時の消失なし |
ok |
|
|
integer |
変換時の消失なし |
ok |
|
smallint |
変換時に数字が消失 |
-1214 |
|
変換時の消失なし |
ok |
|
|
float |
変換時に数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
smallfloat |
変換時に有効数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
double precision |
変換時に有効数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
変換時に数字が消失 |
-1207 |
|
変換時の消失なし |
ok |
|
|
varchar |
変換時に数字が消失 |
-1207 |
|
変換時の消失なし |
ok |
|
|
nchar |
変換時に数字が消失 |
-1207 |
|
変換時の消失なし |
ok |
|
|
text |
|
-608 |
|
byte |
|
-608 |
|
date |
|
-1218 |
|
datetime、 interval |
|
-1260 |
|
decimal |
変換時に数字が消失 |
-1226 |
|
変換時の消失なし |
ok |
|
|
integer |
変換時に数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
smallint |
変換時に数字が消失 |
-1214 |
|
変換時の消失なし |
ok |
|
|
float |
変換時の消失なし |
ok |
|
smallfloat |
変換時に有効数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
double precision |
変換時の消失なし |
ok |
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
ABAP データ値幅 (8) > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 (8) <= データベース列幅 |
ok |
|
|
varchar |
ABAP データ値幅 (8) > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 (8) <= データベース列幅 |
ok |
|
|
nchar |
ABAP データ値幅 (8) > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 (8) <= データベース列幅 |
ok |
|
|
date |
|
-1205 |
|
上記以外のデータ型 |
ABAP データ型 Cを参照 |
(上記を参照) |
書式が異なるため、ABAP データ型 D を Informix のデータ型 date にマッピングすることはできません。表示バリアントが異なるため、書式変換はできません。
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
ABAP データ値幅 (6) > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 (6) <= データベース列幅 |
ok |
|
|
varchar |
ABAP データ値幅 (6) > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 (6) <= データベース列幅 |
ok |
|
|
nchar |
ABAP データ値幅 (6) > データベース列幅 |
[rtrunc] |
|
ABAP データ値幅 (6) <= データベース列幅 |
ok |
|
|
datetime hour to second |
|
-1261 |
|
上記以外のデータ型 |
ABAP データ型 C を参照 |
(上記を参照) |
書式が異なるため、ABAP データ型 T を Informix のデータ型 datetime にマッピングすることはできません。書式変換は実行されません。
|
データベース データ型 |
テストケース [注記 ] |
結果 |
|
char |
ABAP データ値幅 >= 256 |
-609 |
|
ABAP データ値幅 < 256 |
ok |
|
|
varchar |
ABAP データ値幅 >= 256 |
-609 |
|
ABAP データ値幅 < 256 |
ok |
|
|
nchar |
ABAP データ値幅 >= 256 |
-609 |
|
ABAP データ値幅 < 256 |
ok |
|
|
text |
ABAP データ値幅 >= 256 |
ok |
|
byte |
ABAP データ値幅 < 256 |
ok |
|
date |
|
[undef] |
|
datetime |
|
[undef] |
|
interval |
|
[undef] |
|
decimal |
|
[undef] |
|
integer |
|
[undef] |
|
smallint |
|
[undef] |
|
float |
|
[undef] |
|
smallfloat |
|
[undef] |
|
double precision |
|
[undef] |
Informix における R/3 テーブルに対するDBSL では、256 桁より短い 16 進項目を CHAR 書式で格納することができるため、ネイティブ SQL によりこれらの項目にアクセスすることができます。ABAP 変数が 256 桁より短いときは、データベース項目は CHAR として解釈されます。データベース項目の最初の 2 桁には長さの情報が入っています。
またこれは、バイト項目またはテキスト項目にアクセスするときは、ABAP 変数が 256 桁よりも長くなければならないことを意味します。
ネイティブ SQL を使用してデータベース項目を読み込みます。
以下のテーブルはどれも データベース項目型を参照します。このデータベース項目型はデータベーステーブルから読み込む値のデータ型でもあります。場合によっては、複数の SQL データ型が同じように作用します。その場合、データ型はスペース節約のために 1 つのテーブルに格納されています。
左の列は、ABAP プログラム内の目標変数の ABAP データ型です。
右側は ABAPワークベンチのリアクションです。
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
データベースデータ値幅 > ABAP 項目幅 |
[rtrunc] |
|
データベースデータ値幅 = ABAP 項目幅 |
ok |
|
|
データベースデータ値幅 < ABAP
項目幅 |
ok |
|
|
数値 N |
データベースデータ値幅 > ABAP 項目幅 |
[rtrunc] |
|
データベースデータ値幅 = ABAP 項目幅 |
ok |
|
|
データベースデータ値幅 < ABAP
項目幅 |
ok |
|
|
パック数値 P |
データベースデータ値幅 > ABAP 項目幅 |
[rtrunc] |
|
データベースデータ値幅 <= ABAP 項目幅 |
ok |
|
|
整数 I |
データベースデータ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
-1215 |
|
|
変換時の消失なし |
ok |
|
|
浮動小数点数 F |
データベースデータ値が数値以外 |
-1213 |
|
変換時に有効数字が消失 |
[round] |
|
|
変換時に非有効数字が消失 |
[round] |
|
|
変換時の消失なし |
ok |
|
|
日付 D |
データベースデータ値幅 > ABAP 項目幅 (8) |
[rtrunc] |
|
データベースデータ値幅 = ABAP 項目幅 (8) |
ok |
|
|
データベースデータ値幅 < ABAP
項目幅 (8) |
ok |
|
|
時間 T |
データベースデータ値幅 > ABAP 項目幅 (6) |
[rtrunc] |
|
データベースデータ値幅 = ABAP 項目幅 (6) |
ok |
|
|
データベースデータ値幅 < ABAP
項目幅 (6) |
ok |
|
|
16 進数 X |
データベースデータ値幅 > 256 > ABAP 項目幅 |
[rtrunc] |
|
ABAP データ値幅 >= 256 |
-1269 |
|
|
ABAP 項目幅 < 256
かつデータベース列幅 < 256
|
ok
|
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
データベースデータ値幅 > ABAP 項目幅 |
[rtrunc] |
|
データベースデータ値幅 < ABAP
項目幅 |
ok |
|
|
データベースデータ値幅 = ABAP 項目幅 |
ok |
|
|
数値 N |
|
-1269 |
|
パック数値 P |
|
-1269 |
|
整数 I |
|
-1269 |
|
浮動小数点数 F |
|
-1269 |
|
日付 D |
|
-1269 |
|
時間 T |
|
-1269 |
|
16 進数 X |
ABAP データ値幅 < 256 |
-1269 |
|
ABAP データ値幅 >= 256 |
ok |
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
ABAP データ値幅 < 256 |
-1269 |
|
ABAP データ値幅 >= 256 データベースデータ値幅 > ABAP 項目幅 データベースデータ値幅 < ABAP
項目幅 データベースデータ値幅 = ABAP 項目幅 |
[rtrunc] ok ok |
|
|
数値 N |
|
-1269 |
|
パック数値 P |
|
-1269 |
|
整数 I |
|
-1269 |
|
浮動小数点数 F |
|
-1269 |
|
日付 D |
|
-1269 |
|
時間 T |
|
-1269 |
|
16 進数 X |
ABAP データ値幅 < 256 |
-1269 |
|
ABAP データ値幅 >= 256 |
ok |
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
ABAP データ値幅 < 10 |
[rtrunc] |
|
ABAP 項目幅 > 10 |
ok |
|
|
ABAP 項目幅 = 10 |
ok |
|
|
数値 N |
|
[undef] |
|
パック数値 P |
|
[undef] |
|
整数 I |
|
[undef] |
|
浮動小数点数 F |
|
[undef] |
|
日付 D |
|
[undef] |
|
時間 T |
|
[undef] |
|
16 進数 X |
|
-1269 |
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
データベースデータ値幅 > ABAP 項目幅 |
[rtrunc] |
|
データベースデータ値幅 < ABAP
項目幅 |
ok |
|
|
数値 N |
|
[undef] |
|
パック数値 P |
|
[undef] |
|
整数 I |
|
-1260 |
|
浮動小数点数 F |
|
-1260 |
|
日付 D |
|
[undef] |
|
時間 T |
|
[undef] |
|
16 進数 X |
|
-1269 |
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
変換時に数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
数値 N |
変換時に数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
パック数値 P |
変換時に数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
整数 I |
変換時に数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
浮動小数点数 F |
変換時に数字が消失 |
[round] |
|
変換時の消失なし |
ok |
|
|
日付 D |
|
[undef] |
|
時間 T |
|
[undef] |
|
16 進数 X |
|
[undef] |
データ型 DECIMAL をデータ型 C の ABAP 項目に読み込むときは、1,000 の位の区切記号と小数点のスペースを用意する必要があります。
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
変換時に有効数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
数値 N |
変換時に有効数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
パック数値 P |
変換時に有効数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
整数 I |
変換時の消失なし |
ok |
|
浮動小数点数 F |
|
ok |
|
日付 D |
|
[undef] |
|
時間 T |
|
[undef] |
|
16 進数 X |
|
[undef] |
|
ABAP データ型 |
テストケース [注記 ] |
結果 |
|
文字 C |
変換時に有効数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
数値 N |
変換時に有効数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
パック数値 P |
変換時に有効数字が消失 |
[rtrunc] |
|
変換時の消失なし |
ok |
|
|
整数 I |
変換時に有効数字が消失 |
-1215 |
|
変換時の消失なし |
ok |
|
|
浮動小数点数 F |
|
ok |
|
日付 D |
|
[undef] |
|
時間 T |
|
[undef] |
|
16 進数 X |
|
[undef] |
ABAP では、以下のネイティブSQL 文は使用できません。それらの文は以下のカテゴリに分類されます。
キ
NA
該当なしこれらの文は実行不可能で、エラーが発生します。
キ
SP
特殊な構文。これらの文では特殊なネイティブ SQL 構文が必要です。EXEC SQL
のキーワード文書を参照してください。
キ
NR
非推奨。これらの文は ABAP ディクショナリを使用して管理される R/3 データベースでは使用しないでください。
この一覧はすべてを網羅するものではありません。単にプログラミングのガイドラインとして示すものです。ここに記載されていない Informix SQL 文は、いずれも問題なく実行できるはずです。
|
Informix SQL 文 |
クラス |
|
ALLOCATE DESCRIPTOR |
NA |
|
ALTER FRAGMENT |
NR |
|
ALTER INDEX |
NR |
|
ALTER TABLE … MODIFY NEXT SIZE |
NR |
|
ALTER TABLE … LOCK MODE |
NR |
|
ALTER TABLE … ADD ROWIDS |
NR |
|
ALTER TABLE … DROP ROWIDS |
NR |
|
BEGIN WORK |
NA |
|
CHECK TABLE |
NR |
|
CLOSE DATABASE |
NR |
|
CONNECT |
SP |
|
CREATE AUDIT |
NR |
|
CREATE DATABASE |
NR |
|
DATABASE |
NR |
|
DEALLOCATE DESCRIPTOR |
NR |
|
DECLARE CURSOR |
SP |
|
DELETE ...WHERE CURRENT OF <cursid> |
NA |
|
DESCRIBE |
NA |
|
DISCONNECT |
SP |
|
DROP AUDIT |
NR |
|
DROP DATABASE |
NR |
|
EXECUTE |
NA |
|
EXECUTE IMMEDIATE |
NA |
|
EXECUTE PROCEDURE |
SP |
|
FETCH |
SP |
|
FLUSH |
NA |
|
FREE |
NA |
|
GET DESCRIPTOR |
NA |
|
GET DIAGNOSTICS |
NA |
|
GRANT FRAGMENT |
NR |
|
INFO |
NA |
|
LOAD |
NA |
|
OPEN CURSOR |
SP |
|
OUTPUT |
NA |
|
PREPARE |
NA |
|
PUT |
NA |
|
RECOVER TABLE |
NR |
|
RENAME DATABASE |
NR |
|
REVOKE FRAGMENT |
NR |
|
ROLLFORWARD DATABASE |
NR |
|
SELECT ...INTO TEMP <tab> |
NA |
|
SELECT ...FOR UPDATE OF <column> |
NA |
|
SET CONNECTION |
SP |
|
SET DATASKIP |
NR |
|
SET DEBUG FILE |
NR |
|
SET DESCRIPTOR |
NR |
|
SET TRANSACTION |
NR |
|
START DATABASE |
NR |
|
UNLOAD |
NA |
|
UPDATE STATISTICS |
NR |
|
UPDATE ...WHERE CURRENT OF <cursid> |
NA |
|
WHENEVER |
NA |