7.83.2 SELECTについてのコメント/警告

LANSA

7.83.2 SELECTについてのコメント/警告


SQLでは、すべ てのテーブル操作がSystem iでのファイル操作と同じ方法で処理されるわけではありません。認識しておかなければならない重要な点を以下に挙げます。

·         SQL ベースのSELECT操作では、最初の実行時 に一致するすべての行を選択し(一時ファイルに保管)、その後、選択した一連の行を(1行ずつ)処理することができます。

この処理形式が原因で、行を「選択可能」な行に含めるためにSELECTループで実際にその行を挿入または更新する際に、System iアプリケーションとVisual LANSAアプリケーションとで機能が変化する場 合があります

i5/OS環境では、このような行はSELECTループで処理されます。一方、Visual LANSA環境では、これらの行は最初に選択された行に含まれていないため、SELECTループで処理されない可能性があります。

この処理形式は無限ループに陥る可能性があるため、i5/OS環境で使用されること は稀で すが、この処理の違いを理解し、この形式の処理を行わないようにしてください。

·         SELECT ループをGOTOコマンドによって中断しないでください。このような操作を行うと、SQLカーソルが開いたままになる可能性があります。SELECTルー プを終了する場合は、代わりにLEAVE RDMLコマンドを使用してください。

·         い かなる状況でも、SELECTループの途中に分岐しないでください。このように不自然なコーディング技法を使用すると、プラットフォームに関係なく予期し ない結果になります。

·         上 記の重要点と同様の理由で、SELECTループ内の選択条件の値を変更すると、プラットフォームによって異なる結果になる可能性があります。
以下のSELECTループについて考えます。ここで、SALARYはSQLテーブルの列、REQSALARYは何らかの選択値です。

      SELECT FIELDS(...) FROM_FILE(...) WHERE('#SALARY <   
             #REQSALARY') 
          ....... 
          ....... 
          .......
         CHANGE #REQSALARY ('#REQSALARY * 1.1') 
      ENDSELECT
 

·         上 記のロジックは、適切に作成されているとは言えません。また、 プラットフォームによって結果が異なる可能性があります。

·         Visual LANSAは、SELECTが最初に実行された時点の値に従って評価と選択を行います。すでに確立されている選択条件の値を変更しないでください。 変更すると、予期しない結果になる可能性があります。

·         SQL ベースのSELECT操作に、指定ファイル内の「実」フィールドのみが関与するWHERE条件が含まれている場合、そのファイルから一致する一連の行のみ が選択されます。すなわち、読み取り後のトリガーは、WHERE条件に一致しない行に対して呼び出されません

これは、WHERE条件の検査前にすべての行が読み取 られるIBM iのRDMLと機能的に異なる場合があります。

WHERE条件に、ファイル内の「実」フィールド以外のフィールドが関与する場合は、Visual LANSA環境とi5/OS環境(RDMLおよびRDMLX)で実行される処理はまったく同じです。

·         検 索文字列に'%'文字が含まれる場合、総称検索の動作がIBM iとは異なることがあります。

該当するSQLリファレンス・マニュアルのSQL LIKEに関する説明を参照してください。

·         SELECT のオプション*STARTKEYを使用すると、SQL要求によって「ファイル・カーソル」の配置をエミュレートするときにパフォーマンスに悪影響を及ぼす 可能性があるため、このオプションの使用はお勧めしません。