基本ルールは次の通りです。
名前が '#' で始まる場合、列名を使います。
名前が ':' で始まる場合、列値を使います。
例外として、 WHEREやHAVINGのパラメータ内で使用された場合、"#フィールド"はパラメータ内の唯一の値となります。つまり、この場合は列値を使います。
第2のルールとして、識別子に'#' や ':' がない時は、その識別子がSQL名の場合を除き、列名と解釈されます。SQL名の場合は生成されたコードの中にタイプしたそのままのものが残ります。
曖昧です。 トークン <名前> は SQL キーワードかつ LANSA フィールドです。LANSA フィールドの場合、フィールドの先頭に '#' を付けてください。
これについては、以下で更に詳しく説明します。
SQLキーワードの列名が使用される場合、LANSAでは変換されません。つまり、テーブルがどのように作成されているかによりますが、識別子付きの名前またはLANSA名 (ロングネーム) で明確に指定されている必要があります。例えば #SECTION、これはS_CTIONに識別子が付けられたもので、この名前は、SectionCodeと設定することができます。
ファイルで識別子付きの名前が使用されている場合、次のコードは正しく作動しません。
Select_Sql Fields(#SECTION) From_Files((PSLMSTX2)) Group_By(SECTION)
Add_Entry
Endselect
SQLは次のようになります:
SELECT "SectionCode" FROM "EVDEXLIB"."PersonnelMaster2" GROUP BY "SECTION"
Group_By(SECTION) はそのまま残され、実際の列名のS_CTION や SectionCodeと一致しません。
このコードを最も順応性のある方法(注 2参照)で修正するには、以下のように名前の先頭に '#' を付けます。
Select_Sql Fields(#SECTION) From_Files((PSLMSTX2)) Group_By(#SECTION)
Add_Entry
Endselect
SQLは次のようになります:
SELECT "SectionCode" FROM "EVDEXLIB"."PersonnelMaster2" GROUP BY "SectionCode"
ただし、次の例の EMPNOのようにフィールド名がSQLキーワードでない場合は、'#'が付いていてもいなくても自動的にフィールド名が実際の列名に変換されます。
Select_Sql Fields(#EMPNO) From_Files((PSLMSTX2)) Group_By(EMPNO)
Add_Entry
Endselect
EMPNOのロングネームがEmployeeNumberで、PSLMSTX2で名前 (ロングネーム) が許可されている場合は、Group_By のEMPNOはEmployeeNumberとなります。SQLは次のようになります:
SELECT "EmployeeNumber" FROM "EVDEXLIB"."PersonnelMaster2" GROUP BY "EmployeeNumber"
注1:'# フィールド' は、生成されたSQLの全てのパラメータで列名が使用されることを意味します。例外として、WHEREやHAVING内で使用される唯一の値のときは、そのフィールドの実行時の内容が生成されます。自由形式のSELECT_SQL - USING パラメータ - はこれに含まれません。このUSINGパラメータを使用した際の動作については、「7.110.1 自由形式のSELECT_SQLのパラメータ 」を参照してください。
注2:ここで説明されている'順応性のある方法'とは、Windowsの古い形式の列名の識別子が使用された場合、ジェネレーターは自動的にWindowsと Linuxには"S_CTION" を、そして IBM i には"SECTION" を使用するということです。