トークン
言語の基本的な構文単位のことを、トークン と呼びます。 1 つのトークンは、1 つ以上の文字から構成されます。ただし、この文字にはブランクや制御文字は入りません。また、ストリング定数または区切り文字付き ID 内の文字も除きます。(これらの用語については後述します。)
トークンは、通常トークン と 区切りトークン に分類されます。
- 通常トークン とは、数値定数、通常 ID、ホスト ID、またはキーワードです。
例
1 .1 +2 SELECT E 3
- 区切りトークン とは、ストリング定数、区切り文字付き ID、演算記号、または構文図に示される任意の特殊文字を指します。疑問符 (?) も、PREPAREで説明しているようなパラメーター・マーカーとして使用される場合は、区切りトークンとなります。
例
, 'Myst Island' "fld1" = .
スペース:
スペース は、1 つ以上のブランク文字を並べたものです。
制御文字:
制御文字 は、ストリングの位置合わせに使用される特殊文字です。 次の表は、データベース・マネージャーが取り扱う制御文字を示しています。
制御文字 | EBCDIC 16 進値 | UTF-8 の 16 進値 | UCS-2 および UTF-16 の 16 進値 |
---|---|---|---|
タブ | 05 | 09 | U+0009 |
用紙送り | 0C | 0C | U+000C |
復帰 | 0D | 0D | U+000D |
改行 | 15 | C285 | U+0085 |
行送り (改行) | 25 | 0A | U+000A |
DBCS スペース | — | — | U+3000 |
ストリング定数および特定の区切り文字付き ID 以外のトークンには、制御文字またはスペースを含めてはなりません。 制御文字またはスペースは、トークンの後ろに続けることができます。 区切りトークン、制御文字、またはスペースが、すべての通常トークンの後に続かなければなりません。 構文上、通常トークンの後に区切りトークンを続けることが許されない場合には、その通常トークンの後に制御文字またはスペースを続ける必要があります。 ここで述べた規則について、以下に例を示します。
上記の通常トークンをいくつか組み合わせると、トークンが事実上変化して しまいます。その例を次に示します。
1.1 .1+2 SELECTE .1E E3 SELECT1
このため、通常トークンの後には必ず区切りトークンまたはスペースを置かなければなりません。
上記の通常トークンと区切りトークンを組み合わせると、トークンが事実上変化してしまうことがあります。この例を次に示します。
1. .3
名前の修飾でピリオド (.) を 区切り記号として使用すると、そのピリオド は区切りトークンになります。上記の例では、ピリオドを通常トークンの数値定数と組み合わせて使用しています。 このため、通常トークンの後に区切りトークンを置くことは構文上許されません。 このような場合は、通常トークンの後に、区切りトークンではなくスペースを置かなければなりません。
小数点で説明するように、小数点がコンマとして定義されている場合は、コンマが数値定数の小数点として解釈されます。この場合の数値定数の例を、次に示します。
1,2 ,1 1, 1,e1
'1,2' および '1,e1' がそれぞれ 2 つの項目を表す場合には、コンマが小数点として解釈されるのを防ぐために、通常トークン (1) の後と区切りトークン (,) の後の両方にスペースを置かなければなりません。コンマは、通常は区切りトークンですが、小数点として解釈される場合には数値の一部となります。したがって、通常トークン (1) の後に区切りトークン (,) を続けることは構文上許されません。 このような場合は、通常トークンの後に区切りトークンではなくスペースを置く必要があります。
コメント:
動的 SQL ステートメントの中に SQL コメントを組み込むことができます。静的 SQL ステートメントの中では、ホスト言語コメントまたは SQL コメントを組み込むことができます。 コメントは、スペースを指定できる場所であればどこでも指定できますが、区切りトークンの中またはキーワードの EXEC と SQL の間は例外です。Java™ では、組み込み Java 式内での SQL コメントは許可されていません。 SQL コメントには、次の 2 つのタイプがあります。
大文字と小文字:
SQL ステートメントで使用するトークンには、小文字を含めることもできますが、通常トークンの小文字は大文字に変換されます (ただし、ID に大/小文字の区別がある C 言語と Java 言語の変数は例外です)。区切りトークンが大文字に変換されることはありません。 したがって、次のステートメントの場合、
select * from EMP where lastname = 'Smith';
変換後は、以下のステートメントと同等になります。
SELECT * FROM EMP WHERE LASTNAME = 'Smith';