1.2.4 SQL参照情報の出力
SQL参照情報出力は、WebアプリケーションがSELECT文を実行時にSELECT文で取得するデータを出力します。
- メモ
-
HSIC-ECDは、アプリケーションが使用するResultSetオブジェクトとは別のResultSetオブジェクトを使用して結果を取得するため、アプリケーションの動作には影響しません。
DB種別に依存しない注意事項
エビデンスファイルに出力する情報は、commitされていることを保証するものではありません。
取得した列の値を、toString()で文字列に変換して出力します。抽象データ型、BLOB型、CLOB型、BFILE型など、toString()で文字列に変換できない型が使用された場合は<型名>を出力します。
取得した列の値がnull値の場合は、<null>を出力します。
HSICが対応していない構文で書かれたSQL文が実行された場合は、エビデンスファイルにはKFSF50002-Wを出力します。
乱数や現在時刻を取得するファンクションを使用している場合は、正しい参照情報を取得できません。
表の内容を更新するようなファンクションを実行している場合の動作は保証しません。HSICが実行するSQLでファンクションが実行されたときに、アプリケーションが意図しない表を更新することがあります。
SQL文中の「--」から行末まではコメントと見なします。
DBがHiRDBの場合の注意事項
共用表を使用していて、ほかのアプリケーションがLOCK文で共用表を排他していると、HISCが実行するSQL、またははLOCK文の実行がエラーになる場合があります。
HSICが実行するSQL文の排他オプションには、WITHOUT LOCK NOWAITを指定して実行します。
参照情報出力機能は、autocommitを有効にしているアプリケーションでは使用できません。使用している場合は、HSICが実行するSELECT文でcommitされるため、アプリケーションが使用しているリソースが無効となり、SQLエラーになることがあります。
次に示す句、または構文を使用したSQL文には対応していません(参照情報を出力しません)。
-
NEXT VALUE式
-
WRITE指定
DBがOracleの場合の注意事項
SQL文のテーブル名などに予約語ではないSQLキーワードを使用しないでください。使用している場合は、参照情報を取得するためにHSICが不正なSQL文を発行するおそれがあります。なお、予約語とキーワードの詳細については、Oracleのドキュメントを参照してください。
データ型にLONG、またはLONG RAWを指定しているアプリケーションは使用できません。HSICが参照情報を取得することによってストリームが閉じられ、アプリケーションがデータを取得できなくなります。
次に示す句、または構文を使用したSQL文には対応していません(参照情報を出力しません)。
-
順序値NEXTVAL(※)
注※:NEXTVALを列名や表名として使用した場合も、参照情報を出力しません。
DBがDB2の場合の注意事項
HSICが実行するSQL文には、FOR READ ONLY WITH URを指定して実行します。
二重引用符で囲まれた識別子内の「""」は、「"」一つとして扱います。
数値の小数点は常にピリオドとして扱います。
SQL文のテーブル名などにSQLの文法上意味を持つキーワード(例:PORTION、UR)を使用しないでください。使用している場合は、参照情報を取得するためにHSICが不正なSQL文を発行するおそれがあります。
SELECT文のFROM句にINSERT、DELETE、またはUPDATE文を指定して更新処理をした場合、参照情報を取得しません。
アプリケーションが、構造化タイプを使用した列を更新した場合、参照情報の取得に失敗することがあります。
参照情報出力機能は、autocommitを有効にしているアプリケーションでは使用できません。使用している場合は、HSICが実行するSELECT文でcommitされるため、アプリケーションが使用しているリソースが無効となり、SQLエラーになることがあります。
次に示す句、または構文を使用したSQL文には対応していません(参照情報を出力しません)。
-
NEXT VALUE式
DBがSQL Serverの場合の注意事項
SQL文のテーブル名などにSQLの文法上意味を持つキーワード(例:STATISTICSなど)を使用している場合は、参照情報を取得するためにHSICが不正なSQL文を発行するおそれがあります。
アプリケーションが、ユーザ定義テーブル型を使用した列を更新すると、更新前後情報の取得時に誤った情報を取得することがあります。
JDBCドライバのSQLServerへの接続プロパティで、sendTimeAsDatetimeがtrue(デフォルト値)となっている場合に、setTime関数を使用すると、更新前後情報でtime型の値がdatetime型として取得され、'1970-01-01'が付加されることがあります。
次に示す句、または構文を使用したSQL文には対応していません(更新前後情報を出力しません)。
-
NEXT VALUE式
-
READTEXT句
-
UPDATETEXT句
-
WRITETEXT句