Versions Compared

Key

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

7.109 SELECT_SQL

Note

注意:利用オプション  SELECT_SQL ステートメント ウィザードを参照

...

  1. SELECT_SQLコマンドを含むファンクションをコンパイルするには、ライセンス交付された以下の製品が必要です。

    IBM i RPGファンクション:

    IBM - SQL DevKit

    C実行可能プログラム:

    他の製品は不要

    SELECT_SQLを使用するIBM i RPGアプリケーションをコンパイル済みの形式で特定のIBM iから別のIBM i に移植する場合、移植先マシンにライセンス交付済みのIBM製品がインストールされていなくても、そのアプリケーションを実行できます。ただし、移植先マシンでアプリケーションの再コンパイルが必要になった場合、問題が発生します。

  2. SELECT_SQLによってアクセスする情報は読み取り専用です。情報を更新する場合は、一般に、標準のSELECTコマンドを使用する方が簡単です。

  3. SELECT_SQLコマンドは、主に、レポート、画面、または他のテーブルに出力するために、1つ以上のSQLデータベース・テーブル(ファイル)からの複雑な抽出/結合/要約抽出を実行するためのものです。大容量または頻繁に使用される対話型アプリケーションでの使用は想定されていません。このように使用目的に制限がある一方、SELECT_SQLは、結果の出力先が画面、プリンター、または別ファイル(テーブル)のどれであっても、多くの結合/抽出/要約アプリケーションを大幅に単純化し、高速化することのできる非常に強力で便利なコマンドです。

  4. GOTO コマンドで SELECT_SQL ループを出ないようにしてください。これにより、SQL カーソルがオープン状態のままになる場合があります。SELECT_SQL ループから出る場合は、LEAVE RDML コマンドを利用してください。

  5. SELECT_SQLコマンドは、SQLデータベース機能で直接サポートされる、非常に強力なデータベース抽出/結合/要約機能を提供します。ただし現時点では、状況によって、IBM i におけるSQLの実装に大量のリソースが必要になる場合があります。このコマンドでもたらされる大きな利点と必要リソースのバランスの比較検討およびその適切な使用は、すべてユーザーの責任において行ってください。考慮すべき要因の1つに、WHEREパラメータで非キー・フィールドを使用するかどうかがあります。使用する場合、通常、SELECT_SQLの方がSELECTより高速です。使用しない場合は、SELECTの方が高速です。このことは、IBM i でも実行予定のプログラムをまずVisual LANSAで開発する場合に特に重要になります。これは、Visual LANSAでは、SELECTおよびSELECT_SQL間のパフォーマンスの差がそれほど大きくないためです。

  6. ここでは、ユーザーにSQLの'SELECT'コマンドに関する知識があることを前提としています。ここでは、RDMLファンクションからSQLの'SELECT'コマンドに直接アクセスする方法について説明しますが、SQLの'SELECT'コマンドの構文、形式、および使用については扱いません。

  7. WHERE、GROUP_BY、HAVING、およびORDER_BYパラメータが正しく指定されているかどうかの検査は非常に限定的です。

  8. SELECT_SQLはIOモジュール/OAMを使用しないため、リポジトリの検証およびトリガーは省略されます。

  9. ファイルがIBM i 以外のプラッフォームに配布される場合、省略値ではターゲット・プラットフォームのデータ・ライブラリを使用してテーブルが作成されます。ただし、SELECT_SQLへの呼び出しはソース区画のデータ・ライブラリでコンパイルされています。ですから、名前が異なる場合は、組み込み関数DEFINE_OVERRIDE_FILEを使ってテーブル・オーナーを変更する必要があります。

...

  • 1つのフィールドを最大50個のSELECT_SQLコマンドで指定できます。
  • SELECT_SQL内で使用されるLANSAフィールドの名前変更は、1つのフィールドにつきファンクションまたはコンポーネント全体で1回のみです。名前変更は、VL外部ファイルおよびIBM i 外部ファイルで使用されます。外部ファイルをロードすると、列が既存のフィールドと一致した場合に別のフィールドが作成されるため、問題が生じることはありません。
  • CLIはデータの取得時に論理ファイルを使用しないため、FROM_FILEパラメータで指定された論理ファイル内の* SELECT/OMIT基準は無視されます。

以下の理由から、SELECT_SQLコマンドを多用することはお勧めしません。SQLコマンドを多用することはお勧めしません

  • SQLアクセス・コマンドは、RDMLファンクションに直接埋め込まれます。DBMSアクセスは直接的であり、IOM/OAMアクセス・ルーチンを経由しません。この方法では、読み取り前後のトリガーや、LANSA/スーパーサーバーによって実装された「シン・クライアント」型設計を適切に使用できなくなる可能性があります。
  • SELECT_SQLのコンテンツが画面のフィールドからのものである場合は、エンド・ユーザーがSELECT以外の処理が可能になります。特にプログラム可能な自由形式のバージョンだと次のようなことが簡単にできます。
           REQUEST FIELD(#ANYSQL)
        Select_Sql Fields(#STD_NUM) Using(#ANYSQL)
       endselect.

...

移植性に関する考慮事項

複数のプラットフォームを使用する場合、各プラットフォームで使用されるフィールド長を考慮してください。WHEREパラメータを参照してください。 パラメータを参照してください。

Visual LANSAからIBM i 上のデータベースに接続するためにこのコマンドを使用しないでください。この目的でSELECT_SQLコマンドを使用しても、IBM i 上のデータベースではなく、PC上へのデータベースにアクセスします。このタイプの接続を行うには、リモート・プロシージャ・コール(すなわち、call_server_function)を使用する必要があります。

...