現在のタイム・スタンプのロード

ローダーは、列に、時刻機構の読み取りに基づいてタイム・スタンプのデータ・タイプの値を挿入することができます。 たとえば、WebSphere Commerce におけるオファーの STARTDATE および ENDDATE には、 オファーがテーブルに挿入された時刻に基づく値を持たせることができます。 この機能をサポートするために、ローダー・パッケージでは MLTIME テーブルを 使用してタイム・スタンプのインスタンスを保持しています。 このテーブルのスキーマは以下のとおりです。

  table MLTIME
    ( 
    INSTANCEID BIGINT not null,
    MLTIMESTAMP TIMESTAMP
    )

ローダー・カスタマイザー・プロパティー・ファイルを変更することによって、 テーブルの名前およびその列をカスタマイズできます。 以下のようにして、それを行うことができます。

  1. 新規のローダー・カスタマイザー・プロパティー・ファイルを作成する。

    Windows NT Windows 2000 AIX Solaris Linux MassLoadCustomizer.properties は、MassLoader.zip アーカイブにあります。 このファイルを抽出し、.properties 拡張子はそのままにして名前を変更し、 クラスパス内のディレクトリーに置きます。

  2. 重要: 既存の MassLoadCustomizer.properties ファイルを除去または変更しないでください。

    iSeries ISeries_LODWCSDTA_Customizer.properties は、 /QIBM/ProdData/WebCommerce/properties ディレクトリーにあります。 このファイルを /instroot/xml ディレクトリーにコピーし、 .properties という拡張子をそのままにしながら新規ファイルの名前を変更し、 その後この新規ファイルに必要な変更を行います。重要: オリジナルの ISeries_LODWCSDTA_Customizer.properties ファイルを除去または変更しないでください。

  3. 新規ローダー・ファイルに指定されているプロパティーの値を変更する。
  4. 新規ファイル名を、ロード・コマンドのカスタマイザー・パラメーターの値として指定する。

テーブルの名前および列は、ローダー・カスタマイザー・プロパティー・ファイル内の以下のプロパティーを変更することによりカスタマイズすることができます。

  TimestampTableName = MLTIME
  TimestampIdColumn = INSTANCEID
  TimestampValueColumn = MLTIMESTAMP

現在のタイム・スタンプの値に対する入力データは、タイム・スタンプ・ストリング・パターンに基づいています。 タイム・スタンプの期間を指定するのに、以下のマスクが使用されます。

  %D は日を指定します
  %M は月を指定します
  %Y は年を指定します
  %H は時を指定します
  %m は分を指定します
  %s は秒を指定します

ローダー・カスタマイザー・プロパティー・ファイル内のマスクを変更または追加することによって、 現在タイム・スタンプの形式をカスタマイズすることができます。 以下の入力マスクが提供されています。

  InputCurrentTimestampFormat.1 = CURRENT TIMESTAMP
  InputCurrentTimestampFormat.2 = CURRENT TIMESTAMP %D DAYS
  InputCurrentTimestampFormat.3 = CURRENT TIMESTAMP %D DAYS %M MONTHS
  InputCurrentTimestampFormat.4 = CURRENT TIMESTAMP %D DAYS %M MONTHS %Y YEARS
  InputCurrentTimestampFormat.5 = CURRENT TIMESTAMP %Y YEARS %M MONTHS %D DAYS
  InputCurrentTimestampFormat.6 = SYSDATE
  InputCurrentTimestampFormat.7 = ADDDAYS(SYSDATE,%D)
  InputCurrentTimestampFormat.8 = ADDDAYS(ADDMONTHS(SYSDATE,%M),%D) 
  InputCurrentTimestampFormat.9 = ADDDAYS(ADDMONTHS(ADDYEARS(SYSDATE,%Y),%M),%D)

現在のタイム・スタンプに対する入力データは、指定されたパターンと突き合わされます。 データが指定された入力パターンと一致する場合は、そのパターンを使用して入力データが構文解析され、 データベースにそのデータを挿入する前に、ローダーはデータを適切な出力形式に変換します。 添え字の数値が順次に並んでいれば、上記のリストに新規のパターンを追加することができます。

現在のタイム・スタンプを指定する場合には、2 つのターゲット出力形式があります。

  1. CurrentTimestampFormat.Load は、ローダーがロード・モードまたはインポート・モードで稼働している場合に使用します。
  2. CurrentTimestampFormat.JDBC は、 ローダーが JDBC を使用してデータベースに値を挿入したり、値を更新または削除する場合に使用します。

ローダーの、デフォルトのターゲット・パターンは以下のとおりです。

  CurrentTimestampFormat.Load = CURRENT TIMESTAMP %Y YEARS %M MONTHS %D DAYS 
    %h HOURS %m MINUTES %s SECONDS 
  CurrentTimestampFormat.JDBC = CURRENT TIMESTAMP %Y YEARS %M MONTHS %D DAYS
    %h HOURS %m MINUTES %s SECONDS

これらのパターンのプロパティーも、 ローダー・カスタマイザー・プロパティー・ファイルでカスタマイズすることができます。 CurrentTimestampFormat.Load および CurrentTimestampFormat.JDBC プロパティーをカスタマイズする場合、 結果ステートメントの構文が指定されたデータベース管理システムに対して有効であることを確認してください。

CurrentTimestampLiteral プロパティーは、 ローダーが、タイム・スタンプ列の値が現在タイム・スタンプの形式であるかどうかを前もって判別するのに使用します。 これにより、値がタイム・スタンプのストリング表現でないことを判別するのに大量の計算をする必要がなくなります。

  CurrentTimestampLiteral = CURRENT TIMESTAMP

DB2 DB2 の場合、 このプロパティーのデフォルト値は CURRENT TIMESTAMP です。

Oracle Oracle データベースのデフォルト値は SYSDATE です。

現在のタイム・スタンプのロード例

ローダーには、OFFER_ID が 10123 であるオファーを更新するための以下の情報が与えられます。 開始日の値は CURRENT TIMESTAMP で、 終了日の値は CURRENT TIMESTAMP + 14 DAYS となっています。

  <OFFER 
    OFFER_ID="10123"
    STARTDATE="CURRENT TIMESTAMP">
    ENDDATE="CURRENT TIMESTAMP + 14 DAYS"
  />

ローダーは、データベース内で列 STARTDATE および ENDDATE が同じタイム・スタンプのデータ・タイプであることを認識します。 CurrentTimeStampLiteral プロパティーに基づいて、 値は現在タイム・スタンプ形式で指定された値になるように決定されます。 STARTDATE の値は InputCurrentTimeStampFormat.1 のパターンと一致し、 CurrentTimeStampFormat.JDBC プロパティーで指定されたパターンに変換されます。 ENDDATE の値は InputCurrentTimeStampFormat.2 プロパティーの形式と一致し、 これも CurrentTimeStampFormat.JDBC プロパティーで指定された値に変換されます。

現在のタイム・スタンプへの期間の追加例

ローダーを使用すると、現在のタイム・スタンプに期間を追加することができます。 たとえば、特定の日付を入力しないでオファーをロードしたい場合などです。 これを行うには、開始日よりある期間後の、終了日を作成する必要があります。 以下の例は DB2 で使用できます。

  <Offer
    Startdate="Current Timestamp"
    Enddate="Current Timestamp +14 Days +4 Months +1 Year +0 Hours +0 Minutes +0 Seconds"
  />

ただし、プラットフォームに依存しない方法で現在タイム・スタンプの期間を扱うには、 ローダー・カスタマイザー・プロパティー・ファイル内のマスクを変更して、 現在のタイム・スタンプの形式をカスタマイズする必要があります。 以下は、カスタマイズした現在のタイム・スタンプのプロパティー仕様の例です。

  CurrentTimestampLiteral=Current Timestamp

  InputCurrentTimestampFormat.0=Current Timestamp
  InputCurrentTimestampFormat.1=Current Timestamp %D Days
  InputCurrentTimestampFormat.2=Current Timestamp %M Months
  InputCurrentTimestampFormat.3=Current Timestamp %Y Years
  InputCurrentTimestampFormat.4=Current Timestamp %D Days %M Months
  InputCurrentTimestampFormat.5=Current Timestamp %D Days %M Months %Y Years
  InputCurrentTimestampFormat.5=Current Timestamp %H Hours %m Minutes %s Seconds

  CurrentTimestampFormat.JDBC=Current Timestamp %D Days %M Months %Y Years 
    %H Hours %m Minutes %s Seconds

オファーの例とこれらのプロパティー仕様を使用すると、 オファーの終了日は InputCurrentTimestampFormat.5 のパターンと一致します。 これにより、CurrentTimestampFormat.JDBC を使用してオファー情報は以下のようになります。

  <Offer
    Startdate="Current Timestamp"
    Enddate="Current Timestamp +14 Days +4 Months +1 Year +0 Hours +0 Minutes +0 Seconds"
  />

上記の例では、ローダーがどのようにして複数の現在タイム・スタンプ形式を入力し、 適切に所要の出力形式に形式設定することができるかを示しています。 以下の例では、プラットフォームに依存しない形式を処理して、プラットフォーム固有の出力形式にマップする方法を示します。

  <Offer
    Startdate="Now"
    Enddate="Now +14D +4M +1Y"
  />

  CurrentTimestampLiteral=Now

  InputCurrentTimestampFormat.0=Now
  InputCurrentTimestampFormat.1=Now %DD
  InputCurrentTimestampFormat.2=Now %MM
  InputCurrentTimestampFormat.3=Now %YY
  InputCurrentTimestampFormat.4=Now %DD %MM 
  InputCurrentTimestampFormat.5=Now %DD %MM %YY
  InputCurrentTimestampFormat.5=Sysdate %HH %mm %ss 

  CurrentTimestampFormat.JDBC=AddYears(AddMonths(AddDays(AddHours(AddMinutes(AddSeconds
    (Sysdate,%s),%m),%H),%D),%M),%Y)

注: 上記のステートメントは一例です。 これらは、仮想のデータベース管理システムのカスタマイズ・フィーチャーを説明するために用いられているに過ぎません。 DB2 および Oracle データベースには無効です。

オファーの例とこれらのプロパティー仕様を使用すると、 オファーの終了日は InputCurrentTimestampFormat.5 のパターンと一致します。 これにより、CurrentTimestampFormat.JDBC を使用してオファー情報は以下のようになります。

  <Offer
    Startdate="Current Timestamp"
    Enddate="AddYears(AddMonths(AddDays(AddMinutes(AddSeconds(Sysdate,0),0),0),14),4),1)"
  />

関連概念

関連タスク

関連参照

IBM 著作権