Page History
...
- SELECT_SQLコマンドを含むファンクションをコンパイルするには、ライセンス交付された以下の製品が必要です。SELECT_SQLを使用するIBM i RPGアプリケーションをコンパイル済みの形式で特定のIBM iから別のIBM i に移植する場合、移植先マシンにライセンス交付済みのIBM製品がインストールされていなくても、そのアプリケーションを実行できます。ただし、移植先マシンでアプリケーションの再コンパイルが必要になった場合、問題が発生します。
IBM i RPGファンクション:
IBM - SQL DevKit
C実行可能プログラム:
他の製品は不要
- SELECT_SQLによってアクセスする情報は読み取り専用です。情報を更新する場合は、一般に、標準のSELECTコマンドを使用する方が簡単です。
- SELECT_SQLコマンドは、主に、レポート、画面、または他のテーブルに出力するために、1つ以上のSQLデータベース・テーブル(ファイル)からの複雑な抽出/結合/要約抽出を実行するためのものです。大容量または頻繁に使用される対話型アプリケーションでの使用は想定されていません。このように使用目的に制限がある一方、SELECT_SQLは、結果の出力先が画面、プリンター、または別ファイル(テーブル)のどれであっても、多くの結合/抽出/要約アプリケーションを大幅に単純化し、高速化することのできる非常に強力で便利なコマンドです。
- GOTO コマンドで SELECT_SQL ループを出ないようにしてください。これにより、SQL カーソルがオープン状態のままになる場合があります。SELECT_SQL ループから出る場合は、LEAVE RDML コマンドを利用してください。
- SELECT_SQLコマンドは、SQLデータベース機能で直接サポートされる、非常に強力なデータベース抽出/結合/要約機能を提供します。ただし現時点では、状況によって、IBM i におけるSQLの実装に大量のリソースが必要になる場合があります。このコマンドでもたらされる大きな利点と必要リソースのバランスの比較検討およびその適切な使用は、すべてユーザーの責任において行ってください。考慮すべき要因の1つに、WHEREパラメータで非キー・フィールドを使用するかどうかがあります。使用する場合、通常、SELECT_SQLの方がSELECTより高速です。使用しない場合は、SELECTの方が高速です。このことは、IBM i でも実行予定のプログラムをまずVisual LANSAで開発する場合に特に重要になります。これは、Visual LANSAでは、SELECTおよびSELECT_SQL間のパフォーマンスの差がそれほど大きくないためです。
- ここでは、ユーザーにSQLの'SELECT'コマンドに関する知識があることを前提としています。ここでは、RDMLファンクションからSQLの'SELECT'コマンドに直接アクセスする方法について説明しますが、SQLの'SELECT'コマンドの構文、形式、および使用については扱いません。
- WHERE、GROUP_BY、HAVING、およびORDER_BYパラメータが正しく指定されているかどうかの検査は非常に限定的です。
- SELECT_SQLはIOモジュール/OAMを使用しないため、リポジトリの検証およびトリガーは省略されます。
- ファイルがIBM i 以外のプラッフォームに配布される場合、省略値ではターゲット・プラットフォームのデータ・ライブラリを使用してテーブルが作成されます。ただし、SELECT_SQLへの呼び出しはソース区画のデータ・ライブラリでコンパイルされています。ですから、名前が異なる場合は、組み込み関数DEFINE_OVERRIDE_FILEを使ってテーブル・オーナーを変更する必要があります。
...
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 パラメータを参照してください。 Visual LANSAからIBM i 上のデータベースに接続するためにこのコマンドを使用しないでください。この目的でSELECT_SQLコマンドを使用しても、IBM i 上のデータベースではなく、PC上へのデータベースにアクセスします。このタイプの接続を行うには、リモート・プロシージャ・コール(すなわち、call_server_function)を使用する必要があります。 |
次のトピックも参照してください。
| Panel | ||
|---|---|---|
| ||
必須 SELECT_SQL ---- FIELDS --------- フィールド名 ----- *SAME ---------------> >-- FROM_FILES ------- フィールド名 ---- 相関----------------> ------------------------------------------------------------------------------------ 任意指定 >-- WHERE --------- 'SQL where 条件' ------------------------> >-- GROUP_BY ----- 'SQL group by 句' -----------------------> >-- HAVING ------- 'SQL having 条件' ------------------------> >-- ORDER_BY ----- 'SQL order by パラメータ' ---------------> >-- DISTINCT ------ *NO --------------------------------------> >-- IO_STATUS ----- フィールド名 ---------------------------> >-- IO_ERROR ----- *ABORT ----------------------------------| |