このドキュメントでは、個々の SQL ステートメントの説明には詳しく記載されていない基本構文項目について説明します。
このドキュメントでは、次のトピックについて説明します。
Natural SQL ステートメントの構文記述で使用される定数は次のとおりです。
これらの各項目については、以下で説明します。
constant | 項目 constant は、常に Natural 定数を表します。 |
---|---|
integer | 項目 integer は、常に整数の定数を表します。 |
注意:
小数点表記の文字(セッションパラメータ DC
)がコンマ(,)に設定されている場合、指定した数値定数の直後にコンマを続けてはならず、定数とコンマを空白文字で区切る必要があります。そうしないと、エラーまたは不正な結果が生じます。
無効な構文: | 有効な構文: |
---|---|
VALUES (1,'A') leads to a syntax error VALUES (1,2,3) leads to wrong results |
VALUES (1 ,'A') VALUES (1 ,2 ,3) |
Natural SQL ステートメントの構文記述で使用される名前は次のとおりです。
これらの各項目については、以下で説明します。
authorization-identifier | 項目 authorization-identifier(作成者名とも呼ばれる)は、データベーステーブルとビューを修飾するために使用します。 下記も参照してください。 |
---|---|
ddm-name | 項目 ddm-name は、常に Natural ユーティリティ SYSDDM で作成された Natural DDM の名前を表します。 |
view-name | 項目 view-name は、常に DEFINE DATA ステートメントで定義された Natural ビューの名前を表します。
|
column-name | 項目 column-name は、常に物理データベース列の名前を表します。 |
table-name |
構文: authorization-identifierddm-name このセクションの項目 table-name は、SQL 基本テーブルと SQL ビューテーブルの両方を参照するために使用します。 Natural DDM は、使用するテーブル用に作成されている必要があります。 このような DDM の名前は、対応するデータベーステーブル名またはビュー名と同じにする必要があります。 データベーステーブルまたはビューの authorization-identifier は、2 とおりの方法で指定できます。 1 つの方法は標準 SQL 構文に対応しています。この場合、authorization-identifier とテーブル名はピリオドで区切ります。 この形式を使用する場合、authorization-identifier を使用せずに、DDM の名前をデータベーステーブルの名前と同じにする必要があります。 例: DEFINE DATA LOCAL 01 PERS VIEW OF PERSONNEL 02 NAME 02 AGE END-DEFINE SELECT * INTO VIEW PERS FROM SQL.PERSONNEL ... 別の方法として、authorization-identifier を DDM 名の一部として定義できます。 DDM 名は、authorization-identifier とデータベーステーブル名をハイフン(-)で区切って構成されます。 authorization-identifier とテーブル名の間のハイフンは内部的にピリオドに変換されます。 注意: 例: DEFINE DATA LOCAL 01 PERS VIEW OF SQL-PERSONNEL 02 NAME 02 AGE END-DEFINE SELECT * INTO VIEW PERS FROM SQL-PERSONNEL ... authorization-identifier が明示的にも DDM 名内にも指定されていない場合、SQL データベースシステムによって決定されます。 table-names は、 例: ... 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 |
項目 correlation-name は、テーブル名のエイリアス名を表します。 列名を修飾するために使用できます。また、 例: 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 を使用する必要はありませんが、使用するとステートメントがわかりやすくなります。 |
[: ] host-variable [INDICATOR [: ] host-variable] [LINDICATOR [: ] host-variable]
|
構文の各項目については、以下で説明します。
host-variable |
host-variable は、SQL ステートメントで参照される Natural ユーザー定義変数(システム変数ではない)です。 個々のフィールドまたは Natural ビューの一部として定義できます。 受信側フィールドとして( 送信側フィールドとして( 「Natural フォーマットと SQL データタイプ」も参照してください。 |
---|---|
[:] |
コロン:
SQL 標準に準拠するために、ホスト変数の先頭にコロン(:)を付けることもできます。 フレキシブル SQL で使用する場合、ホスト変数はコロンで修飾する必要があります。 例: SELECT NAME INTO :#NAME FROM PERSONNEL WHERE AGE = :VALUE 変数名が SQL 予約語と同一の場合、コロンは常に必要です。 ホスト変数または列の参照が可能な状況では、コロンなしの名前を使用すると、列への参照として解釈されます。 |
INDICATOR |
INDICATOR 節:
受信側 host-variable(ターゲットフィールド)で指定する場合、 例: DEFINE DATA LOCAL 1 NAME (A20) 1 NAMEIND (I2) END-DEFINE SELECT * INTO NAME INDICATOR NAMEIND ... この例では、 空値インジケータフィールドが指定されており、取得される列が空値の場合、空値インジケータフィールドの値は負になり、そのデータタイプに応じてターゲットフィールドが 送信側 host-variable(ソースフィールド)で指定する場合、空値インジケータフィールドはこのフィールドに空値を指定するために使用されます。 例: DEFINE DATA LOCAL 1 NAME (A20) 1 NAMEIND (I2) UPDATE ... SET NAME = :NAME INDICATOR :NAMEIND WHERE ... この例では、
|
LINDICATOR |
LINDICATOR 節:
受信側 host-variable(ターゲットフィールド)で指定する場合、 例 DEFINE DATA LOCAL 1 ADDRESSLIND (I2) 1 ADDRESS (A50/1:6) END-DEFINE SELECT * INTO :ADDRESS(*) LINDICATOR :ADDRESSLIND ... この例では、 送信側 host-variable(ソースフィールド)で指定する場合、長さインジケータフィールドではデータベースに渡されるソースフィールドの文字数を指定します。 例: 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
で指定した特別なホスト変数を使用して、可変長列をサポートできます。 対応する SQL データタイプは VARCHAR (n)
です。LINDICATOR
節も参照してください。
Natural for DB2 では、Natural フォーマットの日付(D)および時刻(T)を使用できます。 これらのフォーマットは、DB2 DATE および TIME に変換されます(『データベース管理システムインターフェイス』ドキュメントの Natural for DB2 に関する説明も参照)。
LINDICATOR
フィールドを使用せずに 1 次元配列として指定した送信側フィールドは、SQL データタイプ VARCHAR
に変換されます。 長さは配列の合計バイト数になり、末尾の空白は考慮されません。