delimited-identifier ::= " delimited-identifier-part { delimited-identifier-part } "
delimited-identifier-part ::= non-double-quote-character | double-quote-symbol
double-quote-symbol ::= ""
区切り識別子は、区切り文字で囲まれた一意の識別子です。InterSystems SQL は、区切り文字として二重引用符 (") をサポートします。区切り識別子は通常、単純な識別子の名前付けの制約を回避するために使用します。
リテラル値を区切るには、InterSystems SQL は一重引用符 (') を使用します。これにより、区切り識別子は二重引用符 (") で、リテラル値は一重引用符 (') で指定されなければなりません。例えば、'7' は数値リテラルの 7 ですが、"7" は区切り識別子です。SQL 文を二重引用符で囲む場合 (ダイナミック SQL の場合など)、その文字列内の二重引用符文字を二重にする必要があります。
SQL の空文字列は、必ず一重引用符文字のペア '' として指定する必要があります。区切り識別子のサポートが有効な場合、二重引用符文字のペア "" は無効な区切り識別子として解析され、SQLCODE -1 エラーを生成します。
区切り識別子の有効な名前
区切り識別子は、一意の名前でなければなりません。区切り識別子は大文字と小文字を区別しません。規約により、識別子の最初の文字は大文字で表示されます。
区切り識別子は、SQL 予約語と同じであってもかまいません。区切り識別子は、通常、SQL 予約語との名前の競合の問題を避けるために使用されます。
区切り識別子には、空白も含めた、ほぼすべての印刷可能文字を含むことができます。ほとんどの区切り識別子の名前に、コンマ (,)、ピリオド (.)、キャレット (^)、および 2 文字の矢印シーケンス (->) を含めることはできませんが、区切り識別子のロール名およびユーザ名にこれらの文字を含めることはできます。区切り識別子のクラス名には、ピリオド (.) を含めることができます。いずれの区切り識別子でも、先頭にアスタリスク (*) を使用することはできません。%vid は、区切り識別子に使用できません。これらの名前付け規約に違反すると、SQLCODE -1 エラーが返されます。
テーブル名、スキーマ名、列名、またはインデックス名として使用される区切り識別子は、有効なクラス・エンティティ名に変換できる必要があります。このため、1 つ以上の英数字が含まれる必要があります。数字 (または句読点とそれに続く数字) で始まる区切り識別子は、“n” 接頭語を付けて対応するクラス・エンティティ名を生成します。
以下の例で示しているクエリは、列とテーブルの両方の名前に区切り識別子を使用します。
SELECT "My Field" FROM "My Table" WHERE "My Field" LIKE 'A%'
区切り識別子は二重引用符で区切られ、文字列リテラル A% は一重引用符で区切られることに注意してください。
区切り識別子をテーブル名に指定する場合は、テーブル名とスキーマ名を別々に区切る必要があります。したがって、"schema"."tablename" または schema."tablename" は、有効な識別子ですが、"schema.tablename" は有効な識別子ではありません。
SQL 予約語
SQL には、識別子として使用できない予約語が多数あります。これらの予約語のリストについては、"InterSystems SQL リファレンス" の “予約語” のセクションを参照してください。