Page History
[ |../../index.htm#lansa/select_sql_p.htm]
現在地:
| Anchor | ||||
|---|---|---|---|---|
|
| Anchor | ||
|---|---|---|
|
...
|
...
|
DISTINCT
FIELDS
FROM_FILES
GROUP_BY
HAVING
IO_ERROR
IO_STATUS
ORDER_BY
WHERE
また「7 また「7.109.2 SELECT_SQL の列名と列値」も参照してください。の列名と列値」も参照してください。
| Anchor | ||||
|---|---|---|---|---|
|
列(フィールド)とそれに関連付けられた「SQLソース」またはファンクションを指定します。
SELECT_SQLコマンドでは、タイプBLOBおよびCLOBのフィールドはサポートされません。これらのフィールドを指定すると、コマンドのコンパイル時に致命的エラーが発生します。
このパラメータで指定するすべての列は、現在のファンクションまたはLANSAデータ・ディクショナリで有効なRDML変数として定義されていなければなりません。
指定する各列について、任意指定の「SQLソース」フィールドを指定することもできます。このフィールドの最大長は50文字です。
ソースを指定しない場合、デフォルト値*SAME (列名と同じ)が使用されます。すなわち、ファンクション内の列名と、SQLテーブル内のその「ソース」が同じであると見なされます。この値を使用する場合、列が、FROM_FILESパラメータで指定する1つ以上のテーブル内の有効な実列として定義されていなければなりません。
例えば:
SELECT_SQL FIELDS((#CUSTNAM)) FROM_FILES(CUSTMST)
この場合、CUSTNAMという列がテーブルCUSTMSTから抽出され、その値がRDMLファンクションの#CUSTNAMというフィールドに返されます。この例では、デフォルト値*SAMEが使用されます。次に、以下の例について考えます。
SELECT_SQL FIELDS((#CUSTNO CUSTNAM)) FROM_FILES(CUSTMST)
この場合、CUSTNAMという列がテーブルCUSTMSTから抽出され、その値がRDMLファンクションの#CUSTNOというフィールドに返されます。
さらに、以下の例について考えます。
SELECT_SQL FIELDS((#SHORTNAME 'SUBSTR(CUSTNAM,3,10)'))
この場合、(SQLテーブルの)列CUSTNAMのサブストリングがRDMLファンクションのフィールド#SHORTNAMEに返されます。
また、以下の例では、CUSTNAMという列が含まれる2つのファイルが結合され、データ取得元のテーブルがCUSTMSTまたはCUSTMST2のどちらかを明確にするために相関が使用されます。
SELECT_SQL FIELDS((#CUSTNAM 'A.CUSTNAM')) FROM_FILES((CUSTMST A)(CUSTMST2 B)) WHERE('A.CUSTID = B.CUSTID')
最後に、以下の例について考えます。
SELECT_SQL FIELDS(#DEPTMENT (#VALUE1 'AVG(SALARY)') (#VALUE2 'SUM(SALARY)')(#VALUE3 'MAX(SALARY)')
この場合、SQLテーブルの列DEPTMENTがRDML変数#DEPTMENTに返され、SQLテーブルのフィールドSALARYの平均がRDML変数 #VALUE1に返されます。また、合計が#VALUE2に返され、最大値が#VALUE3に返されます。
FROM_FILES
&<a href="specfilnames.htm"&>「I「I/O コマンドでのファイル名の指定」&</a&>を参照してください。 を参照してください。
注: このコマンドで使用するファイル(テーブル)名を最大20個指定できます。
注: 他のデータベースの外部ファイルにアクセスする場合、LANSAは、外部ファイルをLANSAにロードするために使用されたデータベース接続情報を見つけます。これは、DEFINE_DB_SERVERおよびCONNECT_FILE BIFを使用することによって、さらに洗練することができます。
指定する各ファイル名について、任意指定の「相関」フィールドを指定することもできます。
相関を指定しない場合、デフォルト値*SAME (ファイル名と同じ)が使用されます。すなわち、特定のテーブル内の列を参照する場合は、実際のテーブル名を使用する必要があります。相関名を使用する場合、その相関名で特定のテーブルの列を識別する必要があります。
例
. . . FROM_FILES((ORDLIN) (ORDDTL)) WHERE('ORDLIN.CUSTNO = ORDDTL.CUSTNO')
相関を使用した場合、このステートメントは以下のようになります。
. . . FROM_FILES((ORDLIN A) (ORDDTL B)) WHERE('A.CUSTNO = B.CUSTNO')
...
| Anchor | ||||
|---|---|---|---|---|
|
SQL_SELECTのWHERE句は、以下に示すように引用符で囲む必要があります。
. . . WHERE('EMPNO < ''A9999''')
. . . WHERE('NOT EMPNO LIKE ''%a''')
WHERE句では、LANSAフィールド名または列名を指定することができます(詳細については、FIELDSパラメータの説明を参照してください)。
SQL言語では、SQL構文として解釈される可能性のある識別子を二重引用符で囲みます。LNSAでは、二重引用符で囲まれたテキストに対して何の処理も行われません。これは二重引用符(")であり、2つの一重引用符('')ではないことに注意してください。
...
コードをLANSA/AD RPGファンクションで実行し、長さが6文字を超えるフィールド名をWHERE句で使用する場合、以下の例のように、これらのフィールド名用の作業フィールドを6文字以下の名前で定義する必要があります。
例
DEFINE #KARTIC REFFLD (#ARTICO) DEFINE #KADTRG REFFLD (#MADTRG) . . . WHERE ('ARTICO = :KARTIC AND MADTRG > :KADTRG')
条件の指定の詳細については、&<a href="condexprsns.htm"&>「条件および式の指定」&</a&>を参照してください。この句の構造に関する詳細については、SQLのガイドを参照してください。 「条件および式の指定」を参照してください。この句の構造に関する詳細については、SQLのガイドを参照してください。
Unicode フィールドを含むRDMLX IBM i外部ファイル
iSeries上のSQLは、グラフィックUnicodeフィールドと文字列リテラルまたはCharタイプの列を直接比較することができず、変換エラーが発生します。
変換エラーを回避しながら式をUnicodeに変換するには、以下の3通りの方法を使用します。
1. 比較にLANSAフィールドを使用します。例えば、WHERE('MYUNIGRPH = :STD_TEXT')のように指定します。
2. リテラルをUnicode (UX'ssss')リテラルとして渡します。例えば、以下の指定があるとします。
WHERE('UNIFLD LIKE 'C%')
これを以下のように指定します。
WHERE('UNIFLD LIKE UX''00430025''').
3. SQLファンクションを使用してリテラルまたは列を変換します。これにより、Unicode式になります。例えば、CHARFLDがChar タイプの列の場合、以下の指定があるとします。
WHERE('UNIFLD = CHARFLD')
これを以下のように指定します。
WHERE('UNIFLD = CAST(CHARFLD AS GRAPHIC(6) CCSID 13488)')
詳細については、IBMマニュアル『DB2 UDB for iSeries SQL Reference』を参照してください。
| Anchor | ||||
|---|---|---|---|---|
|
個々の行ではなく、行のグループの特性を見つけるために使用します。グループ化はソートではなく、選択された各行をグループに追加することであり、グループをSQLで処理することにより、そのグループの特性を導き出すことができます。
選択された行のグループ化の基準にする列を指定します。1列以上指定する場合、そのデータを分けるためにコンマを使用する必要があります。例:GROUP_BY('EMPTSYEAR,EMPTSWEEK')
| Anchor | ||||
|---|---|---|---|---|
|
GROUP_BY句に基づいて選択されたグループの検索条件を指定するために使用します。HAVINGパラメータによって、この句で指定する条件に適合するグループのみが必要であることを示します。すなわち、HAVING句では、グループに含まれる個々の行のプロパティではなく、各グループのプロパティを検査します。
HAVING句には、WHEREパラメータで使用できるものと同様の検索条件を指定できます。
| Anchor | ||||
|---|---|---|---|---|
|
選択された行の取得順序を指定するために使用します。ORDER BYパラメータは、GROUP_BYパラメータと同じ方法で使用できます。
列内の行を取得するときにSQLが使用する列の名前を指定します。1列以上指定する場合、そのデータを分けるためにコンマを使用する必要があります。例: ORDER_BY('SURNAME,GIVENAME')
| Anchor | ||||
|---|---|---|---|---|
|
SELECT_SQLの結果で重複した行が必要ない場合は、このパラメータに*YESを指定します。
結果のテーブルで重複した行が必要な場合は、*NOを指定します。
| Anchor | ||||
|---|---|---|---|---|
|
I/O操作の結果の「戻りコード」を受け取るフィールドの名前を指定します。
デフォルト値*STATUSを指定すると、戻りコードは、#IO$STSという特別なフィールドに保管されます。このフィールドは、他のフィールドと同様にRDMLプログラムで参照できます。
I/O戻りコードを受け取るフィールドとしてユーザー・フィールドを指定する場合、そのフィールドは、長さ2文字の英数字フィールドである必要があります。ユーザー・フィールドを指定した場合も、特別なフィールド#IO$STSは更新されます。
値については、&<a href="specfilklists_1.htm"&>「I「I/Oコマンド でのファイル・キー・リストの指定」&</a&>を参照してください。 を参照してください。
| Anchor | ||||
|---|---|---|---|---|
|
コマンドの実行時にI/Oエラーが発生した場合に実行するアクションを指定します。
I/Oエラーは、「致命的」エラーと見なされます。ファイルが見つからなかった、ファイルが壊れている、ファイルを割り当てることができない、などがこれに該当します。これらのタイプのエラーが発生すると、ファンクションにおいて、そのファイルが関与しているすべての処理が停止します。
デフォルト値*ABORTを指定すると、ファンクションが異常終了し、I/Oエラーの性質を示すエラー・メッセージが発行されます。
*NEXTを指定すると、制御が次のコマンドに渡されます。
*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。
上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。
[ |../../index.htm#lansa/select_sql_p.htm]