7.107.2 SELECT_SQL の列名と列値

基本ルールは次の通りです。

    名前が '#' で始まる場合、列名を使います。

    名前が ':' で始まる場合、列値を使います。

例外として、 WHEREやHAVINGのパラメータ内で使用された場合、"#フィールド"はパラメータ内の唯一の値となります。つまり、この場合は列値を使います。

第2のルールとして、識別子に'#' や ':' がない時は、その識別子がSQL名の場合を除き、列名と解釈されます。SQL名の場合は生成されたコードの中にタイプしたそのままのものが残ります。

これについては、以下で更に詳しく説明します。

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.108.1 自由形式のSELECT_SQLのパラメータ 」を参照してください。

注2:ここで説明されている'順応性のある方法'とは、Windowsの古い形式の列名の識別子が使用された場合、ジェネレーターは自動的にWindowsと Linuxには"S_CTION" を、そして IBM i には"SECTION" を使用するということです。