Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Added |../../index.htm#lansa/select_sql.htm]
現在地:

Anchor
_Ref430273434
_Ref430273434
Anchor
_

...

Toc139468845
_

...

Toc139468845
7.109 SELECT_SQL

&<a href="rdml_database.htm"&>注: 利用オプション&</a&>        &<a href="SELECT_SQL_Wizard.htm"&>SELECT注: 利用オプション        SELECT_SQL ステートメント ウィザード&</a&> を参照
ネイティブIBM i データベース・アクセスを使用する標準のSELECTコマンドとは異なり、SELECT_SQLコマンドは、SQL/400製品を使用してデータベース・アクセスを実行します。
SELECT_SQLコマンドには2つの形式があります。1つは、このセクションで説明する十分に構造化された形式です。この形式では、SQLを正しく構成し、プラットフォームによって異なるオブジェクト名に対応することができますが、SELECTステートメントのタイプは非常に単純なものに制限されます。もう1つは、自由形式のSELECT_SQLです。この形式では、データベース・エンジンが有効な構文として受け入れる任意のSELECTステートメントを入力できますが、LANSAでは、複数のプラットフォームに渡るオブジェクト名の互換性維持について考慮されません。これらの2つの違いにより、SQLが複数のデータベースに渡って予想どおりに実行されない可能性が高くなります。詳細については、「7SQLです。この形式では、データベース・エンジンが有効な構文として受け入れる任意のSELECTステートメントを入力できますが、LANSAでは、複数のプラットフォームに渡るオブジェクト名の互換性維持について考慮されません。これらの2つの違いにより、SQLが複数のデータベースに渡って予想どおりに実行されない可能性が高くなります。詳細については、「7.110 自由形式のSELECT_SQL」を参照してください。 SQL」を参照してください。
SELECT_SQLコマンドは、ENDSELECTコマンドと対で使用し、1つ以上のテーブル (ファイル) の、1行以上の行 (レコード) を処理するための「ループ」を作成します。
例として、以下のSELECT_SQL / ENDSELECT ループはテーブルORDLINの製品および数量の値がすべて選択され、リストに1つずつセットされます:
---> DEF_LIST NAME(#ALIST) FIELDS(#PRODUCT #QUANTITY)  -> SELECT_SQL FIELDS(#PRODUCT #QUANTITY) |               USING('SELECT "PRODUCT", "QUANTITY" FROM "MYDTALIB"."ORDLIN"') | |    ADD_ENTRY(#ALIST) |  -- ENDSELECT
 
SELECT_SQLの実装方法は、IBM i 上でRPGとして生成されたオブジェクトと、Cとして生成されたオブジェクトとでは異なります。RPGは、SELECT_SQLを静的な埋め込みSQLに実装します。一方、Cは、SELECT_SQLを呼び出しレベル・インターフェース(CLI)に実装するため、動的になります。この違いの効果については、以降、関連する箇所で説明していきます。
SELECT_SQLを使用する前に、以下の点を認識しておいてください。
1.   SELECT_SQLコマンドを含むファンクションをコンパイルするには、ライセンス交付された以下の製品が必要です。

...

PRC1064

    • WARNING: Name is not a defined field. Correct it for portability.
      フィールド名としていずれかのファイルの実列を使用できるため、選択は機能しますが、LANSAでサポートされるすべてのデータベースで機能するためには、フィールド名(ハッシュ記号なし)を使用する必要があります。

PRC1065

    • WARNING: Field <afield> is not a physical field in any of the files in the FROM_FILES parameter.
      LANSAは、FROM_FILESパラメータで指定されたいずれかのファイルにおいて、SQLで指定された名前がLANSAで認識されているかどうかを検査します。その名前がLANSA名であるか、変換された名前であるか、または列名の変更であるかを検査する他、予約済みのSQLキーワードであるかどうかも検査します。どれにも該当しない場合、この警告が表示されます。
      この警告の原因として、フィールド名の代わりに列名が使用されていることが考えられます。この場合、SQLはVisual LANSAで動作します。または、フィールドが正しくない可能性があり、この場合は実行時に失敗します。

PRC1067

    • Fields A$ and A_ both resolve to A_ so A_ in SELECT_SQL will be set with Non-IBM i text A_
      同じ名前に解決されるフィールドが複数ある場合、生成されたコードで各フィールドを識別できなくなり、コンパイル・エラーが発生します。SELECT_SQLでは、下位互換性を保つために固定リテラル値が使用されるため、コンパイルは成功します。ただし、これはIBM i で実行されない場合があります。1つのファンクション内でこのように一致するフィールドを使用しないようコードを変更してください。
      例えば、列名がA_で固定されている場合、IBM iでは実行されません。代わりにA$を使用してください。

 

移植性に関する考慮事項

複数のプラットフォームを使用する場合、各プラットフォームで使用されるフィールド長を考慮してください。WHERE 複数のプラットフォームを使用する場合、各プラットフォームで使用されるフィールド長を考慮してください。WHERE パラメータを参照してください。
Visual LANSAからIBM i 上のデータベースに接続するためにこのコマンドを使用しないでください。この目的でSELECT_SQLコマンドを使用しても、IBM i 上のデータベースではなく、PC上へのデータベースにアクセスします。このタイプの接続を行うには、リモート・プロシージャ・コール(すなわち、call_server_function)を使用する必要があります。

参照
7.109.1 SELECT_SQL のパラメータ
7.109.2 SELECT_SQL の列名と列値
7.109.3 SELECT_SQL の使用例
7.109.4 SELECT_SQL の参考文献
7.109.5 SELECT-SQL の強制変換
                                                         必須
  SELECT_SQL -- FIELDS ----- フィールド名 - *SAME ---------->
                                |             SQLフィールド・ソース |
                                 ----- 最大1000 -------------
             >- FROM_FILES ----- フィールド名  相関 -->
                                |                              |
                                 ------------ 最大20 -----------
 -----------------------------------------------------------------
                                                         任意指定
             >- WHERE ------ 'SQL where条件' --------->
             >- GROUP_BY --- 'SQL group by句' --------->
             >- HAVING ----- 'SQL having条件' -------->
             >- ORDER_BY --- 'SQL order byパラメータ' ------>
             >- DISTINCT --- *NO --------------------------->
                                *YES
             >- IO_STATUS -- フィールド名 -------------------->
                                *STATUS
             >- IO_ERROR --- *ABORT ------------------------|
                                *NEXT
                                *RETURN
                                ラベル
[ Image Added |../../index.htm#lansa/select_sql.htm]