このドキュメントでは、個々の SQL ステートメントの説明で参照されている基本構文項目について説明します。
このドキュメントでは、次のトピックについて説明します。
Natural SQL ステートメントの構文記述で使用される定数は次のとおりです。
constant |
項目 constant は、Natural 定数または SQL datetime
constant のいずれかを参照します。
|
integer |
項目 integer は、常に整数の定数を表します。
|
注意:
小数点表記の文字(セッションパラメータ DC
)がコンマ(,)に設定されている場合、指定した数値定数の直後にコンマを続けてはならず、定数とコンマを空白文字で区切る必要があります。そうしないと、エラーまたは不正な結果が生じます。
無効な構文: | 有効な構文: |
---|---|
|
|
SQL 日時定数は、次のいずれかを指定する特定のフォーマットの文字列定数です。
DATE
string-constant |
SQL 日付定数を指定します。例:DATE '2013-15-01' |
TIME
string-constant |
SQL 時間定数を指定します。例:TIME '10:30:15' |
TIMESTAMP
string-constant |
SQL タイムスタンプ定数を指定します。例:TIMESTAMP '2014-15-01 10:20:15.123456' |
有効な string-constant
フォーマットについては、IBM の『DB2 SQL 参照情報』を参照してください。
Natural SQL ステートメントの構文記述で使用される名前は次のとおりです。
項目 authorization-identifier
(作成者名とも呼ばれる)は、データベーステーブルとビューを修飾するために使用します。下記の table-name 下の authorization-identifier
も参照してください。
項目 ddm-name
は、Natural DDM サービスで作成された、Natural データ定義モジュール(DDM)の名前を常に参照します。
項目 view-name
は、常に DEFINE DATA
ステートメントで定義された Natural ビューの名前を表します。
項目 column-name
は、常に物理データベース列の名前を表します。
項目 location-name
は常にテーブルの位置を示します。ロケーション名の指定はオプションで、SQL 拡張セットに属します。
このセクションの項目 table-name
は、SQL 基本テーブルと SQL ビューテーブルの両方を参照するために使用します。
table-name
の構文項目:
[[location-name.]authorization-identifier.]ddm-name |
構文要素の説明:
構文要素 | 説明 |
---|---|
ddm-name |
Natural データ定義モジュール(DDM)は、使用するテーブル用に作成されている必要があります。このような DDM の名前は、対応するデータベーステーブル名またはビュー名と同じにする必要があります。 |
location-name |
このオプション項目は、アクセスするテーブルの場所を指定します。 |
authorization-identifier |
データベーステーブルまたはビューの authorization-identifier は、2 とおりの方法で指定できます。
1 つの方法は標準 SQL 構文に対応しています。この場合、 例: DEFINE DATA LOCAL 01 PERS VIEW OF PERSONNEL 02 NAME 02 AGE END-DEFINE SELECT * INTO VIEW PERS FROM SQL.PERSONNEL ... 別の方法として、 例: DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 AGE END-DEFINE SELECT * INTO VIEW PERS FROM SQL-PERSONNEL ...
テーブル名は、 例: ... DELETE FROM SQL.PERSONNEL WHERE AGE IS NULL ... ... INSERT INTO SQL.PERSONNEL (NAME,AGE) VALUES ('ADKINSON',35) ... ... UPDATE SQL.PERSONNEL SET SALARY = SALARY * 1.1 WHERE AGE > 30 ... |
項目 correlation-name
は、table-name
のエイリアス名を表します。列名を修飾するために使用できます。また、SELECT
ステートメントの INTO
節で使用すると、Natural ビューでフィールドを暗黙的に修飾できます。
例:
DEFINE DATA LOCAL 01 PERS-NAME (A20) 01 EMPL-NAME (A20) 01 AGE (I2) END-DEFINE ... SELECT X.NAME , Y.NAME , X.AGE INTO PERS-NAME , EMPL-NAME , AGE FROM SQL-PERSONNEL X , SQL-EMPLOYEES Y WHERE X.AGE = Y.AGE END-SELECT ...
ほとんどの場合、correlation-names
を使用する必要はありませんが、使用するとステートメントがわかりやすくなります。
parameter
の構文項目:
[: ] host-variable [INDICATOR [: ]host-variable] [LINDICATOR [: ] host-variable]
|
構文要素の説明:
構文要素 | 説明 |
---|---|
host-variable |
host-variable は、SQL ステートメントで参照される Natural ユーザー定義変数(システム変数ではない)です。個々のフィールドまたは Natural ビューの一部として定義できます。
受信側フィールドとして( 送信側フィールドとして( 「Natural フォーマットと SQL データタイプ」も参照してください。 |
[:] |
コロン:
SQL 標準に準拠するために、 例: SELECT NAME INTO :#NAME FROM PERSONNEL WHERE AGE = :VALUE 変数名が SQL 予約語と同一の場合、コロンは常に必要です。 |
INDICATOR |
INDICATOR 節:
受信側 例: DEFINE DATA LOCAL 1 NAME (A20) 1 NAMEIND (I2) END-DEFINE SELECT * INTO NAME INDICATOR NAMEIND ... この例では、 空値インジケータフィールドが指定されており、取得される列が空値の場合、空値インジケータフィールドの値は負になり、そのデータタイプに応じてターゲットフィールドが 送信側 例: DEFINE DATA LOCAL 1 NAME (A20) 1 NAMEIND (I2) UPDATE ... SET NAME = :NAME INDICATOR :NAMEIND WHERE ... この例では、
|
LINDICATOR |
LINDICATOR 節:
受信側
例 DEFINE DATA LOCAL 1 ADDRESSLIND (I2) 1 ADDRESS (A50/1:6) END-DEFINE SELECT * INTO :ADDRESS(*) LINDICATOR :ADDRESSLIND ... この例では、 送信側 例: DEFINE DATA LOCAL 1 NAMELIND (I2) 1 NAME (A20) 1 AGE (I2) END-DEFINE MOVE 4 TO NAMELIND MOVE 'ABC%' TO NAME SELECT AGE INTO :AGE WHERE NAME LIKE :NAME LINDICATOR :NAMELIND ...
フィールドを 固定長フィールドの定義には、I2 として指定した |
ホスト変数の Natural データフォーマットは、次の表に従って SQL データタイプに変換されます。
Natural フォーマット/長さ | SQL データタイプ |
---|---|
An |
CHAR (n) |
B2 |
SMALLINT |
B4 |
INT |
Bn (n は 2 または 4 以外)
|
CHAR (n) |
F4 |
REAL |
F8 |
DOUBLE PRECISION |
I2 |
SMALLINT |
I4 |
INT |
Nnn.m |
NUMERIC
(nn+m,m) |
Pnn.m |
NUMERIC
(nn+m,m) |
T |
TIME |
D |
DATE |
Gn (ビューフィールドのみ)
|
GRAPHIC (n) |
Natural では、変換後の SQL データタイプがデータベース列と互換性があるかどうかはチェックされません。フォーマット N のフィールドを除き、データ変換は行われません。
また、Natural SQL では、標準 Natural フォーマットに対する次の拡張を使用できます。
フォーマット A の 1 次元配列を使用して、253 バイトを超える英数字列をサポートできます。この配列はインデックス 1 から定義する必要があり、インデックスとしてアスタリスク(*)を使用することでのみ参照できます。対応する SQL データタイプは
CHAR
(n)
です。ここで、n
は配列の合計バイト数です。
キーワード LINDICATOR
で指定した特別な host-variable
を使用して、可変長列をサポートできます。対応する SQL データタイプは VARCHAR
(n)
です。LINDICATOR
節も参照してください。
Entire Access では、Natural フォーマットの日付(D)および時刻(T)を使用できます。これらのフォーマットは、対応するデータベース依存フォーマットに変換されます(詳細については、Entire Access ドキュメントを参照)。
LINDICATOR
フィールドを使用せずに 1 次元配列として指定した送信側フィールドは、SQL データタイプ VARCHAR
に変換されます。長さは配列の合計バイト数になり、末尾の空白は考慮されません。