7.85 2 SELECT_SQLの列名と列値

LANSA

7.85 2 SELECT_SQLの列名と列値


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

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

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

例外として、 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パラメータを使用した際の動作については、「自 由形式のSELECT_SQLのパラメータ」を 参照してください。

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