(57)【要約】【課題】関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値に対する演算を効率的に行うこと。【解決手段】参照項目、第１の処理項目を含む第１の関係データの順序集合を参照項目値で整列する。被参照項目、第２の処理項目を含む第２の関係データのレコード中、各参照項目値を被参照項目に含むレコード数を参照項目値の順に累計し第１累計配列を得る。第２の関係データのレコード中、各被参照項目値を含むレコード数を参照項目値の順に累計し第２累計配列を得る。第２の処理項目値を第１の関係データの順序集合のレコード順に対応させ作業用記憶領域に設定する。第１累計配列と第２累計配列により、第１の関係データの各レコードに対応する作業用記憶領域中の項目値を特定して演算を行い、演算結果を当該レコードに対応付けて記録する。記録内容により当レコードの第１の処理項目の値リストとポインタ配列を更新する。【選択図】図１
2011203899.tif 000002
【特許請求の範囲】
【請求項１】
複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理プログラムにおいて、コンピュータに、
前記複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、前記順序集合で定義されたレコードと前記値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって前記関係データを記憶する記憶手段から、参照項目および第１の処理項目が定義された第１の関係データと被参照項目および第２の処理項目が定義された第２の関係データとを取得し、
前記参照項目に対応するポインタ配列を用いて、前記参照項目に対応する値リストに記載された項目値をキーとして前記第１の関係データの順序集合を整列し、
前記第２の関係データのレコードのうち前記参照項目に対応する値リストに記載された各項目値を前記被参照項目として含む第１のレコードの数を、前記被参照項目に対応するポインタ配列を用いて算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第１のレコードの数を累計した第１の累計配列を生成すると共に、前記第２の関係データのレコードのうち前記被参照項目に対応する値リストに記載された各項目値を含む第２のレコードの数を算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第２のレコードの数を累計した第２の累計配列を生成し、
前記第２の処理項目に対応する値リストに記載された項目値を、前記第１の関係データの順序集合が示すレコードの順序に対応させて第１の作業用記憶領域に設定し、
前記第１および前記第２の累計配列を用いることで、前記第１の関係データの各レコードに対応する前記第１の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる前記第１の処理項目の項目値を用いて当該レコードに対応する前記第１の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う前記第１の処理項目の項目値の変化を示す情報を第２の作業用記憶領域に設定し、
前記第２の作業用記憶領域に設定された情報に基づいて、前記第１の処理項目に対応する値リストとポインタ配列とを更新する、
処理を実行させることを特徴とするデータ処理プログラム。
【請求項２】
前記第１の作業用記憶領域に設定された何れかの項目値を特定する処理は、前記第１の累計配列を当該第１の累計配列の各要素位置を示す要素番号の昇順に参照し、参照のたびに、当該要素番号に対応する第１の累計数Ｍ（Ｍは０以上の整数）を取得し、取得した前記第１の累計数Ｍに対応づけられた前記第１の関係データの順序集合で示されるレコードにつき前記参照項目に対応するポインタ配列のポインタ値を用いて、前記第２の累計配列に含まれる第２の累計数Ｓ（Ｓは０以上の整数）を取得して、Ｉ（Ｎ）＝Ｍ−Ｎ＋１＋Ｓ（Ｎは１以上の整数であり、前記第１の累計配列の参照回数を示す）の計算結果Ｉ（Ｎ）に基づいて、前記第１の作業用記憶領域に設定された何れかの項目値を特定することを特徴とする請求項１記載のデータ処理プログラム。
【請求項３】
前記演算は、各レコードに含まれる前記第１の処理項目の項目値と当該レコードに対応する前記第１の作業用記憶領域の項目値との差を求めることを特徴とする請求項１または２の何れか一項に記載のデータ処理プログラム。
【請求項４】
前記コンピュータに、更に、
前記第１の作業用記憶領域の項目値を０で更新する場合に前記演算に伴う前記第１の処理項目の項目値の変化後の値を第２の作業用記憶領域に設定し、前記第１の作業用記憶領域の項目値を０以外で更新する場合には前記第２の作業用記憶領域への設定を行わないよう制御する、
処理を実行させることを特徴とする請求項３記載のデータ処理プログラム。
【請求項５】
前記ポインタ配列を更新する処理は、前記第１の関係データの各レコードにつき、前記第２の作業用記憶領域に当該レコードに含まれる前記第１の処理項目の項目値の変化後の値が設定されている場合には、当該レコードに含まれる前記第１の処理項目に対応する値リストの項目値が前記変化後の値を示すよう当該第１の処理項目に対応するポインタ配列を更新し、前記第２の作業用記憶領域に当該レコードに対応する前記第１の処理項目の項目値の変化後の値が設定されていない場合には、当該レコードに含まれる前記第１の処理項目に対応する値リストの項目値が０を示すよう当該第１の処理項目に対応するポインタ配列を更新する処理であることを特徴とする請求項４記載のデータ処理プログラム。
【請求項６】
前記演算は、前記第１の関係データに前記第１の処理項目を含み所定の優先度が付与された複数の処理項目が含まれる場合、前記優先度に応じた順序で、前記複数の処理項目それぞれの項目値を用いて行い、当該演算に伴う前記各処理項目の項目値の変化を示す情報を第２の作業用記憶領域に設定することを特徴とする請求項１乃至５の何れか一項に記載のデータ処理プログラム。
【請求項７】
前記コンピュータに、更に、
前記演算の演算内容に応じて、当該演算に伴う前記第１の関係データに定義された第３の処理項目の項目値の変化を示す情報を前記第２の作業用記憶領域に設定し、
前記第２の作業用記憶領域に設定された情報に基づいて、前記第３の処理項目に対応する値リストとポインタ配列とを更新する、
処理を実行させることを特徴とする請求項１乃至６の何れか一項に記載のデータ処理プログラム。
【請求項８】
複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理装置において、
前記複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、前記順序集合で定義されたレコードと前記値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって前記関係データを記憶する記憶手段から、参照項目および第１の処理項目が定義された第１の関係データと被参照項目および第２の処理項目が定義された第２の関係データとを取得する関係データ取得手段と、
前記参照項目に対応するポインタ配列を用いて、前記参照項目に対応する値リストに記載された項目値をキーとして前記第１の関係データの順序集合を整列し、前記第２の関係データのレコードのうち前記参照項目に対応する値リストに記載された各項目値を前記被参照項目として含む第１のレコードの数を、前記被参照項目に対応するポインタ配列を用いて算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第１のレコードの数を累計した第１の累計配列を生成すると共に、前記第２の関係データのレコードのうち前記被参照項目に対応する値リストに記載された各項目値を含む第２のレコードの数を算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第２のレコードの数を累計した第２の累計配列を生成する累計配列生成手段と、
前記第２の処理項目に対応する値リストに記載された項目値を、前記第１の関係データの順序集合が示すレコードの順序に対応させて第１の作業用記憶領域に設定し、前記第１および前記第２の累計配列を用いることで、前記第１の関係データの各レコードに対応する前記第１の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる前記第１の処理項目の項目値を用いて当該レコードに対応する前記第１の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う前記第１の処理項目の項目値の変化を示す情報を第２の作業用記憶領域に設定する演算手段と、
前記第２の作業用記憶領域に設定された情報に基づいて、前記第１の処理項目に対応する値リストとポインタ配列とを更新する更新手段と、
を有することを特徴とするデータ処理装置。
【請求項９】
複数の項目が定義された複数のレコードを含む関係データを処理するためのコンピュータのデータ処理方法において、
前記複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、前記順序集合で定義されたレコードと前記値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって前記関係データを記憶する記憶部から、参照項目および第１の処理項目が定義された第１の関係データと被参照項目および第２の処理項目が定義された第２の関係データとを取得し、
前記参照項目に対応するポインタ配列を用いて、前記参照項目に対応する値リストに記載された項目値をキーとして前記第１の関係データの順序集合を整列し、
前記第２の関係データのレコードのうち前記参照項目に対応する値リストに記載された各項目値を前記被参照項目として含む第１のレコードの数を、前記被参照項目に対応するポインタ配列を用いて算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第１のレコードの数を累計した第１の累計配列を生成すると共に、前記第２の関係データのレコードのうち前記被参照項目に対応する値リストに記載された各項目値を含む第２のレコードの数を算出し、前記参照項目に対応する値リストに記載された項目値の順に前記第２のレコードの数を累計した第２の累計配列を生成し、
前記第２の処理項目に対応する値リストに記載された項目値を、前記第１の関係データの順序集合が示すレコードの順序に対応させて第１の作業用記憶領域に設定し、
前記第１および前記第２の累計配列を用いることで、前記第１の関係データの各レコードに対応する前記第１の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる前記第１の処理項目の項目値を用いて当該レコードに対応する前記第１の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う前記第１の処理項目の項目値の変化を示す情報を第２の作業用記憶領域に設定し、
前記第２の作業用記憶領域に設定された情報に基づいて、前記第１の処理項目に対応する値リストとポインタ配列とを更新する、
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理プログラム、データ処理装置およびデータ処理方法に関する。
【背景技術】
【０００２】
従来、情報処理システムでは様々なデータが扱われている。データの管理には関係データベース（ＲＤＢ：Relational DataBase）を用いるものがある。
しかし、ＲＤＢは、矛盾なくデータ処理を行うことができる反面、扱うデータ量が大量になるほど、処理遅延が増大する。
【０００３】
そこで、レコードに含まれる各項目を複数の一次元配列に分解した情報ブロックとして管理し、当該情報ブロックに対する操作を行うことで、大量なデータに対する項目値の検索、ソートおよび結合などの処理を高速に実行する技術がある（例えば、特許文献１，２，３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−３３９３９０号公報
【特許文献２】特開２００１−０４３２９０号公報
【特許文献３】特開２００３−１５０６３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１〜３記載の方法では、ある項目値に対して演算処理を行う場合、レコード単位でしか行うことができない。より具体的には、レコードを情報ブロックに分解した状態で演算を行おうとすると、単一のレコードに含まれる項目値同士の演算処理が行えるのみである。すなわち、あるレコード中の所定の項目値に対して、他のレコードの項目値を参照した演算を行うことが困難であった。
【０００６】
これに対し、このような演算機能をサポートする所定のアプリケーションに当該演算処理を委譲することが考えられる。しかし、そのようなアプリケーションでは、入力されるデータ形式として通常用いられているデータ形式（例えば、ＲＤＢ）が予定されているのが一般的である。
【０００７】
このため、従来では当該演算に際して、情報ブロックで管理されるテーブルをＲＤＢ等のデータ形式に読み込み可能に変換し、上記アプリケーションに当該変換データを引き渡す等の処理を行っていた。この場合、データ形式の変換やデータ入出力等のために余計な処理コストやメモリ利用を伴い、処理効率が悪いという問題があった。
【０００８】
本発明はこのような点に鑑みてなされたものであり、関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に行うデータ処理プログラム、データ処理装置およびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明では上記課題を解決するために、複数の項目が定義された複数のレコードを含む関係データを処理するためのデータ処理プログラムが提供される。このデータ処理プログラムは、コンピュータに、複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、順序集合で定義されたレコードと値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって関係データを記憶する記憶手段から、参照項目および第１の処理項目が定義された第１の関係データと被参照項目および第２の処理項目が定義された第２の関係データとを取得し、参照項目に対応するポインタ配列を用いて、参照項目に対応する値リストに記載された項目値をキーとして第１の関係データの順序集合を整列し、第２の関係データのレコードのうち参照項目に対応する値リストに記載された各項目値を被参照項目として含む第１のレコードの数を、被参照項目に対応するポインタ配列を用いて算出し、参照項目に対応する値リストに記載された項目値の順に第１のレコードの数を累計した第１の累計配列を生成すると共に、第２の関係データのレコードのうち被参照項目に対応する値リストに記載された各項目値を含む第２のレコードの数を算出し、参照項目に対応する値リストに記載された項目値の順に第２のレコードの数を累計した第２の累計配列を生成し、第２の処理項目に対応する値リストに記載された項目値を、第１の関係データの順序集合が示すレコードの順序に対応させて第１の作業用記憶領域に設定し、第１および第２の累計配列を用いることで、第１の関係データの各レコードに対応する第１の作業用記憶領域に設定された何れかの項目値を特定し、各レコードに含まれる第１の処理項目の項目値を用いて当該レコードに対応する第１の作業用記憶領域の項目値を更新する演算を行うと共に、当該演算に伴う第１の処理項目の項目値の変化を示す情報を第２の作業用記憶領域に設定し、第２の作業用記憶領域に設定された情報に基づいて、第１の処理項目に対応する値リストとポインタ配列とを更新する、処理を実行させる。
【００１０】
また、上記課題を解決するために、上記データ処理プログラムを実行するコンピュータと同様の機能を有するデータ処理装置が提供される。
また、上記課題を解決するために、上記データ処理プログラムを実行するコンピュータと同様の処理を行うデータ処理方法が提供される。
【発明の効果】
【００１１】
上記データ処理プログラム、データ処理装置およびデータ処理方法によれば、関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に行う。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るデータ処理装置を示す図である。
【図２】第２の実施の形態に係る情報処理システムの構成を示す図である。
【図３】第２の実施の形態に係るデータ処理サーバのハードウェア構成を示す図である。
【図４】第２の実施の形態に係るコンピュータの機能構成を示す図である。
【図５】商品テーブルのデータ構造例である。
【図６】出庫テーブルのデータ構造例を示す図である。
【図７】商品テーブルの情報ブロックを示す図である。
【図８】出庫テーブルの情報ブロックを示す図である。
【図９】テーブルの取得処理を示すフローチャートである。
【図１０】引当処理を示すフローチャートである。
【図１１】商品テーブルのソート処理の具体例を示す図である。
【図１２】出庫テーブルのソート処理の具体例を示す図である。
【図１３】結合テーブルにおけるマスタ側配列要素の累計配列を示す図である。
【図１４】引当値設定処理を示すフローチャートである。
【図１５】引当値設定処理の具体例を示す図である。
【図１６】変換テーブル生成処理を示すフローチャートである。
【図１７】変換テーブル生成処理の具体例を示す第１の図である。
【図１８】変換テーブル生成処理の具体例を示す第２の図である。
【図１９】変換テーブル生成処理の具体例を示す第３の図である。
【図２０】変換テーブル生成処理の具体例を示す第４の図である。
【図２１】フィールド更新処理を示すフローチャートである。
【図２２】フィールド更新処理を示すフローチャートである。
【図２３】累計配列の取得処理の具体例を示す図である。
【図２４】フィールド更新処理の具体例を示す第１の図である。
【図２５】フィールド更新処理の具体例を示す第２の図である。
【図２６】フィールド更新処理の具体例を示す第３の図である。
【図２７】フィールド更新処理の具体例を示す第４の図である。
【図２８】フィールド更新処理の具体例を示す第５の図である。
【図２９】フィールド更新処理の具体例を示す第６の図である。
【図３０】フィールド更新処理の具体例を示す第７の図である。
【図３１】フィールド更新後の商品テーブルの例を示す図である。
【図３２】入力コマンドおよび結果表示内容の例を示す図である。
【図３３】従来のデータ処理方法との比較を示す図である。
【図３４】データ処理方法の第１の変形例を示す第１の図である。
【図３５】データ処理方法の第１の変形例を示す第２の図である。
【図３６】データ処理方法の第２の変形例を示す第１の図である。
【図３７】データ処理方法の第２の変形例を示す第２の図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して詳細に説明する。
［第１の実施の形態］
図１は、第１の実施の形態に係るデータ処理装置を示す図である。データ処理装置１は、複数の項目が定義された複数のレコードを含む関係データを処理する。データ処理装置１は、記憶手段１ａ、データ取得手段１ｂ、累計配列生成手段１ｃ、演算手段１ｄおよび更新手段１ｅを有する。
【００１４】
記憶手段１ａは、複数のレコードの順序を示す順序集合と、各項目がとる項目値を重複なく記載した項目毎の値リストと、順序集合で定義されたレコードと値リストに記載された項目値とを対応付けた項目毎のポインタ配列と、を含むデータ構造によって関係データを記憶する。ここで、項目毎のポインタ配列および値リストの組を情報ブロックと称する。
【００１５】
データ取得手段１ｂは、記憶手段１ａから、参照項目および第１の処理項目が定義された第１の関係データと被参照項目および第２の処理項目が定義された第２の関係データとを取得する。
【００１６】
具体的には、第１の関係データは、順序集合２、参照項目を示す情報ブロック（ポインタ配列２ａ、値リスト２ｂ）および第１の処理項目を示す情報ブロック（ポインタ配列２ｃ、値リスト２ｄ）を含む。また、第２の関係データは、順序集合３、被参照項目を示す情報ブロック（ポインタ配列３ａ、値リスト３ｂ）および第２の処理項目（ポインタ配列３ｃ、値リスト３ｄ）を含む。
【００１７】
累計配列生成手段１ｃは、参照項目に対応するポインタ配列２ａを用いて、参照項目に対応する値リスト２ｂに記載された項目値をキーとして第１の関係データの順序集合２を整列する。
【００１８】
累計配列生成手段１ｃは、第２の関係データのレコードのうち参照項目に対応する値リスト２ｂに記載された各項目値を被参照項目として含む第１のレコードの数を、被参照項目に対応するポインタ配列３ａを用いて算出する。累計配列生成手段１ｃは、参照項目に対応する値リスト２ｂに記載された項目値の順に第１のレコードの数を累計した第１の累計配列４を生成する。累計配列生成手段１ｃは、第２の関係データのレコードのうち被参照項目に対応する値リスト３ｂに記載された各項目値を含む第２のレコードの数を算出する。累計配列生成手段１ｃは、参照項目に対応する値リストに記載された項目値の順に第２のレコードの数を累計した第２の累計配列５を生成する。
【００１９】
演算手段１ｄは、第２の処理項目に対応する値リスト３ｄに記載された項目値を、第１の関係データの順序集合２が示すレコードの順序に対応させて第１の作業用記憶領域６に設定する。
【００２０】
そして、演算手段１ｄは、第１の累計配列４および第２の累計配列５を用いることで、第１の関係データの各レコードに対応する第１の作業用記憶領域６に設定された何れかの項目値を特定する。
【００２１】
更に、演算手段１ｄは、特定した項目値と各レコードに含まれる第１の処理項目の項目値とを用いて当該レコードに対応する第１の作業用記憶領域６の項目値を更新する演算を行う。このとき、演算手段１ｄは当該演算に伴う第１の処理項目の項目値の変化を示す情報を第２の作業用記憶領域７に設定する。
【００２２】
更新手段１ｅは、第２の作業用記憶領域７に設定された情報に基づいて、第１の処理項目に対応する値リスト２ｄとポインタ配列２ｃとを更新する。
データ処理装置１によれば、データ取得手段１ｂにより、記憶手段１ａから、参照項目および第１の処理項目が定義された第１の関係データと被参照項目および第２の処理項目が定義された第２の関係データとが取得される。累計配列生成手段１ｃにより、参照項目に対応するポインタ配列２ａを用いて、参照項目に対応する値リスト２ｂに記載された項目値をキーとして第１の関係データの順序集合２が整列される。累計配列生成手段１ｃにより、第２の関係データのレコードのうち参照項目に対応する値リスト２ｂに記載された各項目値を被参照項目として含む第１のレコードの数が、被参照項目に対応するポインタ配列３ａを用いて算出される。累計配列生成手段１ｃにより、参照項目に対応する値リスト２ｂに記載された項目値の順に第１のレコードの数を累計した第１の累計配列４が生成される。累計配列生成手段１ｃにより、第２の関係データのレコードのうち被参照項目に対応する値リスト３ｂに記載された各項目値を含む第２のレコードの数が算出される。累計配列生成手段１ｃにより、参照項目に対応する値リスト２ｂに記載された項目値の順に第２のレコードの数を累計した第２の累計配列５が生成される。そして、演算手段１ｄにより、第２の処理項目に対応する値リスト３ｄに記憶された項目値が、第１の関係データの順序集合２が示すレコードの順序に対応させて第１の作業用記憶領域６に設定される。演算手段１ｄにより、第１の累計配列４および第２の累計配列５を用いることで、第１の関係データの各レコードに対応する第１の作業用記憶領域６に設定された何れかの項目値が特定される。演算手段１ｄにより、各レコードに含まれる第１の処理項目の項目値を用いて当該レコードに対応する第１の作業用記憶領域６の項目値を更新する演算が行われると共に、当該演算に伴う第１の処理項目の項目値の変化を示す情報が第２の作業用記憶領域７に設定される。更に、更新手段１ｅにより、第２の作業用記憶領域７に設定された情報に基づいて、第１の処理項目に対応する値リスト２ｄとポインタ配列２ｃとが更新される。
【００２３】
これにより、関係データを情報ブロックにより管理する場合に、あるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に行うことができる。具体的には、第１の累計配列４および第２の累計配列５を用いて、第１の作業用記憶領域６の項目値のうち、第１の関係データの各レコードに対応する項目値を適正に特定することができる。より具体的には、値リスト２ｂ中、ある参照項目の項目値に対して、第１の作業用記憶領域６の所定の位置を固定的に参照することができる。よって、第１の作業用記憶領域６の当該固定位置に設定した値を用いて、参照項目の各項目値に対応する第１の処理項目の項目値に対する演算が可能となる。
【００２４】
また、演算手段１ｄは、当該演算に伴う第１の処理項目の項目値の変化を示す情報を第２の作業用記憶領域７に格納する。第１の処理項目に値リスト２ｄを第２の作業用記憶領域７の情報に基づいて、適正に変更することができる。
【００２５】
このようにして、関係データを情報ブロックで管理した状態でレコードと関連のない固定領域を参照した各種の演算を行うことができる。したがって、従来のように所定のアプリケーションに当該演算処理を委譲する方法に比べて、委譲に伴うデータ形式の変換やデータ入出力等が発生しない。よって、データ処理装置１はあるレコードに含まれる項目値と当該レコードに含まれない項目値とを用いた演算を効率的に実行することができる。
【００２６】
以下の実施の形態では、商品在庫の引当処理にデータ処理装置１の機能を適用する場合を例に採り、更に具体的に説明する。
［第２の実施の形態］
図２は、第２の実施の形態に係る情報処理システムの構成を示す図である。この情報処理システムは、複数の倉庫に保管された種々の商品の在庫を管理するシステムである。この情報処理システムは、ネットワーク１０を介して、ＤＢサーバ２０、端末装置３０およびデータ処理サーバ１００が接続されている。
【００２７】
ＤＢサーバ２０は、複数の倉庫に保管された商品の在庫を管理するための関係データを記憶する。関係データは、ＤＢサーバ２０ではＲＤＢの表形式データとして管理される。
端末装置３０は、ユーザの操作を受け付ける情報処理装置である。ユーザは、端末装置３０を操作して、データ処理サーバ１００に所望の処理を実行させることができる。
【００２８】
データ処理サーバ１００は、ＤＢサーバ２０が記憶する表形式データを取得する。データ処理サーバ１００は、当該表形式データに含まれる複数のレコードの順序を示す順序集合および順序集合に関連付けられた情報ブロックに分割したデータ構造により当該関係データを管理する。データ処理サーバ１００は、情報ブロックを半導体メモリ上に配置する。そして、データ処理サーバ１００は、情報ブロックに対して端末装置３０から受け付けた処理を実行する。データ処理サーバ１００は、半導体メモリ上に配置した情報ブロックに対して処理を行うことができる。このため、ＨＤＤ（Hard Disk Drive）にデータを格納して処理を行うよりも、処理速度を向上できる。
【００２９】
図３は、第２の実施の形態に係るデータ処理サーバのハードウェア構成を示す図である。データ処理サーバ１００は、ＣＰＵ（Central Processing Unit）１０１、ＲＯＭ（Read Only Memory）１０２、ＲＡＭ（Random Access Memory）１０３、ＨＤＤ１０４、グラフィック処理装置１０５、入力インタフェース１０６、記録媒体読取装置１０７および通信インタフェース１０８を有する。
【００３０】
ＣＰＵ１０１は、データ処理サーバ１００全体を制御する。
ＲＯＭ１０２は、データ処理サーバ１００上のＢＩＯＳ（Basic Input / Output System）のプログラムなどを記憶する。
【００３１】
ＲＡＭ１０３は、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションソフトウェア（以下、アプリケーションという）のプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０３は、ＣＰＵ１０１による処理に必要な各種データを記憶する。ＲＡＭ１０３は、表形式データを分解して生成された情報ブロックを記憶する。
【００３２】
ＨＤＤ１０４は、ＯＳのプログラム、アプリケーションのプログラムを記憶する。また、ＨＤＤ１０４はＣＰＵ１０１による処理に必要な各種データを記憶する。なお、ＨＤＤ１０４に代えてＳＳＤ（Solid State Drive）など他の種類の記憶装置を用いてもよい。
【００３３】
グラフィック処理装置１０５は、モニタ１１と接続される。グラフィック処理装置１０５は、ＣＰＵ１０１からの命令にしたがって画像をモニタ１１の画面に表示させる。
入力インタフェース１０６は、キーボード１２とマウス１３と接続される。入力インタフェース１０６は、キーボード１２やマウス１３から送られてくる信号をＣＰＵ１０１に送信する。
【００３４】
記録媒体読取装置１０７は、記録媒体１４に記憶されたデータを読み取る読取装置である。例えば、データ処理サーバ１００が有すべき機能は、その機能の処理内容を記述したプログラムをコンピュータに実行させることで実現できる。そのようなプログラムは、コンピュータ読み取り可能な記録媒体１４に記録して配布することができる。また、ネットワーク１０に接続されたプログラム配信サーバ（図示せず）に、そのプログラムを格納してもよい。この場合、データ処理サーバ１００は、ネットワーク１０を介してプログラム配信サーバからプログラムをダウンロードすることができる。
【００３５】
記録媒体１４としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリを使用できる。磁気記録装置には、ＨＤＤ、フレキシブルディスク（ＦＤ：Flexible Disk）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−Ｒ／ＲＷ／ＲＡＭなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。半導体メモリには、ＵＳＢ（Universal Serial Bus）メモリなどのフラッシュメモリがある。
【００３６】
通信インタフェース１０８は、ネットワーク１０と接続される。通信インタフェース１０８は、ネットワーク１０を介してＤＢサーバ２０および端末装置３０とデータ通信する。
【００３７】
なお、ＤＢサーバ２０および端末装置３０もデータ処理サーバ１００と同様のハードウェア構成により実現することができる。
図４は、第２の実施の形態に係るコンピュータの機能構成を示す図である。データ処理サーバ１００は、データ記憶部１１０、変換用データ記憶部１２０、データ管理部１３０、処理要求受付部１４０、テーブル抽出部１５０、累計配列生成部１６０、演算処理部１７０、データ更新部１８０および表示処理部１９０を有する。これらの機能は、ＣＰＵ１０１が所定のプログラムを実行することで実現される。あるいは、これらの機能の全部または少なくとも一部を専用のハードウェアにより実現してもよい。
【００３８】
データ記憶部１１０は、ＤＢサーバ２０が記憶する表形式データを順序集合および項目毎に分解した情報ブロックを記憶する。
変換用データ記憶部１２０は、情報ブロックに含まれる所定の処理項目に対する演算に用いる作業用領域を記憶する。また、変換用データ記憶部１２０は、情報ブロックに含まれる項目値を変換するための変換用データを記憶する。
【００３９】
データ管理部１３０は、ＤＢサーバ２０から表形式データを取得し、順序集合や情報ブロックを生成してデータ記憶部１１０に格納する。データ管理部１３０は、各部の要求に応じてデータ記憶部１１０に記憶された情報ブロックを読み出し、各部へ出力する。
【００４０】
処理要求受付部１４０は、端末装置３０からの処理要求あるいはキーボード１２やマウス１３の操作入力に基づく処理要求を受け付ける。処理要求は、データ処理サーバ１００が実行すべき処理内容を記述したコマンドである。当該コマンドには、処理の対象とする関係データ（以下、テーブルという）、参照項目や被参照項目および演算処理の内容（例えば、引当処理）を指定する情報などが含まれる。
【００４１】
テーブル抽出部１５０は、処理要求受付部１４０が受け付けたコマンドに基づき、データ管理部１３０を介して処理対象とするテーブルを抽出する。テーブル抽出部１５０は、抽出した各テーブルを参照項目でソートする。テーブル抽出部１５０はソート後の各テーブルを累計配列生成部１６０に出力する。
【００４２】
累計配列生成部１６０は、テーブル抽出部１５０から取得した各テーブルにつき所定の複数の累計配列を得る。演算処理部１７０は、取得した当該複数の累計配列を演算処理部１７０に出力する。
【００４３】
演算処理部１７０は、当該複数の累計配列および変換用データ記憶部１２０に記憶された作業用領域を用いて、上記コマンドで指定された演算処理（例えば、引当処理）を実行する。演算処理部１７０は、演算処理の過程で、データ管理部１３０が管理するテーブルの項目値につき演算処理の結果を反映すべきレコードとその内容とを記録した変換用データを生成する。演算処理部１７０は、生成した変換用データを変換用データ記憶部１２０に格納する。
【００４４】
データ更新部１８０は、演算処理部１７０による一連の演算処理が完了すると、変換用データ記憶部１２０に記憶された変換用データに基づいて、データ管理部１３０が管理するテーブルに含まれる項目値を変換する。
【００４５】
表示処理部１９０は、データ管理部１３０から情報ブロックを取得し、当該情報ブロックで示される表形式データを生成する。表示処理部１９０は、生成した表形式データをモニタ１１や端末装置３０に表示させる。
【００４６】
図５は、商品テーブルのデータ構造例である。商品テーブル２００は、表形式データであり、ＤＢサーバ２０に格納される。商品テーブル２００には、商品名、仕入日、Ａ倉庫およびＢ倉庫を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、１つの商品に関する情報を示す。
【００４７】
商品名の項目には、商品の名称が設定される。仕入日の項目には、その商品の仕入日が設定される。Ａ倉庫の項目には、Ａ倉庫の在庫数が設定される。Ｂ倉庫の項目には、Ｂ倉庫の在庫数が設定される。なお、“Ａ倉庫”および“Ｂ倉庫”は、倉庫の名称である。
【００４８】
商品テーブル２００には、例えば、商品名“りんご”、仕入日“２００９／１１／１６”、Ａ倉庫“１０”、Ｂ倉庫“１０”という情報が設定される。これは、商品名“りんご”につき仕入日“２００９／１１／１６”に仕入れた在庫がＡ倉庫に“１０”個、Ｂ倉庫に“１０”個存在することを示している。
【００４９】
なお、引当元となる倉庫として、Ａ倉庫、Ｂ倉庫が存在するが、Ａ倉庫からはＢ倉庫よりも優先して引当を行うものとする。例えば、ある商品について、Ａ倉庫およびＢ倉庫の何れにも在庫が存在する場合には、まず、Ａ倉庫の在庫から引当を行う。
【００５０】
また、Ａ倉庫、Ｂ倉庫には、列番号を示すインデックス値が予め設定される。Ａ倉庫にはインデックス値“１”が設定されている。また、Ｂ倉庫にはインデックス値“２”が設定されている。
【００５１】
図６は、出庫テーブルのデータ構造例を示す図である。出庫テーブル３００は、表形式データであり、ＤＢサーバ２０に格納される。出庫テーブル３００には、商品名および出庫数を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、１つの商品に関する情報を示す。
【００５２】
商品名の項目には、商品の名称が設定される。出庫数の項目には、当該商品につき出庫すべき数量（すなわち、引当るべき数量）が設定される。
出庫テーブル３００には、例えば、商品名“りんご”、出庫数“２５”という情報が設定される。これは、商品名“りんご”につき、“２５”個出庫が必要（すなわち、在庫からの引当が必要）であることを示している。
【００５３】
図７は、商品テーブルの情報ブロックを示す図である。データ管理部１３０は、商品テーブル２００について順序集合２１０および情報ブロック２２０，２３０，２４０，２５０を生成し、データ記憶部１１０に格納する。
【００５４】
順序集合２１０は、商品テーブル２００の各レコードの順序を定義する配列である。順序集合２１０には、オーダーセット（ＯＳ：Order Set）を示す値が設定される。ＯＳ値は、後述するポインタ配列の要素番号を指定する値である。
【００５５】
情報ブロック２２０は、商品テーブル２００に含まれる商品名の項目を示す。情報ブロック２２０は、ポインタ配列（ＰＶ：Pointer ValueあるいはPosition Value）２２１および値リスト（ＶＬ：Value List）２２２を有する。
【００５６】
ポインタ配列２２１は、値リストの要素番号を示すポインタを格納する配列である。
値リスト２２２は、商品名を示す項目値を格納する配列である。値リスト２２２には、重複した項目値は存在しない。また、値リスト２２２に格納される項目値は、昇順にソートされている。
【００５７】
情報ブロック２３０，２４０，２５０に含まれる各配列に関しても同様である。ここで、情報ブロック２３０は、商品テーブル２００に含まれる仕入日の項目を示す。情報ブロック２４０は、商品テーブル２００に含まれるＡ倉庫の項目を示す。情報ブロック２５０は、商品テーブル２００に含まれるＢ倉庫の項目を示す。また、ポインタ配列２３１，２４１，２５１は、ポインタ配列２２１に対応する。また、値リスト２３２，２４２，２５２は、値リスト２２２に対応する。
【００５８】
このような順序集合２１０および各情報ブロックを用いることで、商品テーブル２００の各レコードを表現することができる。
例えば、順序集合２１０の要素番号“０”には、ＯＳ値“１”が設定されている。この場合、当該レコードの商品名を得るためには、次のように情報ブロック２２０の参照を行う。まず、ＯＳ値“１”に基づき情報ブロック２２０のポインタ配列２２１の要素番号“１”を参照し、ＰＶ“２”を得る。そして、ＰＶ“２”に基づき値リスト２２２の要素番号“２”を参照し、商品名“りんご”を得る。
【００５９】
また、ＯＳ値“１”に対応する仕入日を得るためには、情報ブロック２３０を同様に参照すればよい。ＯＳ値“１”に対応するＡ倉庫およびＢ倉庫の在庫数を得るためには、情報ブロック２４０，２５０を同様に参照すればよい。
【００６０】
このようにして、商品テーブル２００の１行目のレコードを表現することができる。また、ＯＳ値“２”のレコードは、商品テーブル２００の２行目のレコードに対応する。また、ＯＳ値“３”のレコードは、商品テーブル２００の３行目のレコードに対応する。
【００６１】
ここで、ポインタ配列２２１，２３１，２４１，２５１には、配列要素の先頭（要素番号“０”）に“０”が設定されている。また、値リスト２２２，２３２，２４２，２５２には、配列要素の先頭（要素番号“０”）が“−”（設定なし）となっている。これらは、システムの便宜上設けられているものであり、特に必要とならない場合は各配列中に設けなくてもよい。
【００６２】
図８は、出庫テーブルの情報ブロックを示す図である。データ管理部１３０は、出庫テーブル３００について順序集合３１０および情報ブロック３２０，３３０を生成し、データ記憶部１１０に格納する。
【００６３】
順序集合３１０は、図７で説明した順序集合２１０に対応する。
情報ブロック３２０は、出庫テーブル３００に含まれる商品名の項目を示す。情報ブロック３２０は、ポインタ配列３２１および値リスト３２２を有する。
【００６４】
また、情報ブロック３３０は、出庫テーブル３００に含まれる出庫数の項目を示す。情報ブロック３３０は、ポインタ配列３３１および値リスト３３２を有する。
ポインタ配列３２１，３３１および値リスト３２２，３３２に関しては、上述のポインタ配列２２１および値リスト２２２と同様である。
【００６５】
このような順序集合３１０および各情報ブロックを用いることで、出庫テーブル３００の各レコードを表現することができる。
例えば、順序集合３１０の要素番号“０”には、ＯＳ値“１”が設定されている。よって、当該レコードの商品名として、情報ブロック３２０に基づき“りんご”を取得できる。また、当該レコードの出庫数として情報ブロック３３０に基づき“２５”個を取得できる。
【００６６】
なお、ポインタ配列３２１，３３１および値リスト３２２，３３２の配列要素の先頭（要素番号“０”）および“−”（設定なし）に関しては、図７で説明したように、システムの便宜上設けられたものである。
【００６７】
更に、上記図５〜８の説明では、説明を容易とするために商品テーブル２００に２種類の商品のみが設定されている場合を示したが、それ以上の商品が設定されていてもよい。
次に、以上のような構成を備えるデータ処理サーバ１００の処理手順に関して説明する。
【００６８】
まず、ＤＢサーバ２０が記憶する表形式データに基づくテーブルの取得処理に関して説明する。テーブルの取得は、例えばＤＢサーバ２０およびデータ処理サーバ１００が起動したタイミング、情報処理システムによる業務が開始したタイミングなどにデータ管理部１３０により実行される。
【００６９】
図９は、テーブルの取得処理を示すフローチャートである。以下、図９に示す処理をステップ番号に沿って説明する。
［ステップＳ１１］データ管理部１３０は、ＤＢサーバ２０から表形式データを取得する。上述の例では、商品テーブル２００および出庫テーブル３００を取得する。
【００７０】
［ステップＳ１２］データ管理部１３０は、表形式データに含まれる各項目を情報ブロックに分解する。上述の例では、商品テーブル２００に含まれる商品名、仕入日、Ａ倉庫およびＢ倉庫の各項目につき順序集合２１０および情報ブロック２２０，２３０，２４０，２５０が生成される。また、出庫テーブル３００に含まれる商品名および個数の各項目につき順序集合３１０および情報ブロック３２０，３３０が生成される。
【００７１】
［ステップＳ１３］データ管理部１３０は、生成した各順序集合および各情報ブロックをＲＡＭ１０３に設けられたデータ記憶部１１０に格納する。
このようにして、データ管理部１３０は、ＤＢサーバ２０から取得した表形式データに基づいて各順序集合および各情報ブロックを生成することができる。なお、上記ステップＳ１２の処理は、より詳細には特開２０００−３３９３９０号公報に記載の方法により行うことができる。
【００７２】
次に、このようにして生成された各情報ブロックに基づく引当処理の手順を説明する。
図１０は、引当処理を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
【００７３】
［ステップＳ２１］処理要求受付部１４０は、キーボード１２またはマウス１３の操作入力により受け付けた処理要求（コマンド）、あるいは、端末装置３０から受信したコマンドに含まれる引当対象の商品、出庫数を示す情報を受け付ける。例えば、ユーザは、データ処理サーバ１００が提供する所定のＧＵＩ（Graphical User Interface）を端末装置３０に表示させ、これらの情報を入力することができる。ユーザは、例えば項目値リストとして情報ブロック３３０に設定された商品（“みかん”および“りんご”）を選択することができる。端末装置３０は、当該入力を受け付けると入力内容に応じたコマンドを生成し、処理要求受付部１４０に送信する。例えば、当該コマンドには、関係データとして、商品テーブルおよび出庫テーブルを指定する情報が含まれる。また、例えば、参照項目や被参照項目として“商品名”を指定する情報が含まれる。更に、例えば、演算処理の内容として処理項目“Ａ倉庫”、“Ｂ倉庫”および“出庫数”を指定する情報が含まれる。この場合、商品テーブルは第１の実施の形態における第１の関係データに対応する。また、出庫テーブルは第１の実施の形態における第２の関係データに対応する。更に、処理項目“Ａ倉庫”、“Ｂ倉庫”は第１の実施の形態における第１の処理項目に対応する。処理項目“出庫数”は第１の実施の形態の第２の処理項目に対応する。
【００７４】
処理要求受付部１４０は、受け付けたコマンドをテーブル抽出部１５０に出力する。
［ステップＳ２２］テーブル抽出部１５０は、データ管理部１３０を介して処理対象のテーブルを取得する。ここでは、商品テーブル２００を示す順序集合２１０や出庫テーブル３００を示す順序集合３１０を取得する。なお、以下では、順序集合２１０および情報ブロック２２０，２３０，２４０，２５０が示すテーブルを表形式の商品テーブル２００と区別するため、単に商品テーブルと称する。また、順序集合３１０および情報ブロック３２０，３３０が示すテーブルを表形式の出庫テーブル３００と区別するため、単に出庫テーブルと称する。
【００７５】
［ステップＳ２３］テーブル抽出部１５０は、両テーブルに含まれる値リストにつき双方の値リストを同値にする（共通化）。テーブル抽出部１５０は、取得した各テーブルを結合キーでソートする。具体的には、順序集合２１０，３１０のＯＳ値を結合キーである商品名でソートする。また、順序集合３１０のＯＳ値を結合キーである商品名でソートする。テーブル抽出部１５０は、ソート後の商品テーブルおよび出庫テーブルを累計配列生成部１６０に出力する。
【００７６】
［ステップＳ２４］累計配列生成部１６０は、ソート後の各テーブルを結合キーで結合し、結合テーブルを得る。ここで、“結合テーブル”とは各テーブルにつきソート後の順序集合と所定の累計配列とで表されるテーブルを示している。累計配列生成部１６０は取得した累計配列を演算処理部１７０に出力する。当該累計配列の詳細は図１３で説明する。
【００７７】
［ステップＳ２５］演算処理部１７０は、出庫テーブルに基づいて、引当値を設定した引当作業領域を生成する。当該引当値設定処理の詳細は図１４で説明する。
［ステップＳ２６］演算処理部１７０は、商品テーブルおよび引当作業領域に基づいて、引当演算を行うと共に、商品テーブルの項目値を変換するための変換テーブルを生成する。当該変換テーブル生成処理の詳細は図１６で説明する。
【００７８】
［ステップＳ２７］演算処理部１７０は、引当処理の対象となった各フィールドの項目値、すなわち、情報ブロック２４０，２５０のポインタ配列２４１，２５１および値リスト２４２，２５２の変換処理を行う。当該フィールド更新処理の詳細は図２１，２２で説明する。
【００７９】
このようにして、データ処理サーバ１００は商品の引当処理を行う。
以下、上記ステップＳ２３のソート処理を具体的に説明する。なお、上記ステップＳ２３において、本例では商品テーブルと出庫テーブルとの結合項目は同一であるため、共通化処理前後で各テーブルの構造は変化しない。したがって、以降の説明において共通化処理については説明を省略するが、その処理手順には特開２００３−１５０６３３号公報に記載された方法を適用することができる。
【００８０】
図１１は、商品テーブルのソート処理の具体例を示す図である。テーブル抽出部１５０は、結合キーとなる商品名を示す情報ブロック２２０に基づいて、順序集合２１０のＯＳ値をソートする。テーブル抽出部１５０は、以下の手順によって当該ソート処理を行うことができる。
【００８１】
（１）テーブル抽出部１５０は、値リスト２２２の各項目値に対応するレコードが商品テーブル中に何個存在するかを示す存在数配列２６０を値リスト２２２の各項目値の要素番号に対応づけて生成する。
【００８２】
例えば、ポインタ配列２２１には、順序集合２１０のＯＳ値で参照されるＰＶとして、“１”であるものが１つ存在する。したがって、存在数配列２６０の要素番号“１”の位置には“１”が設定される。また、ポインタ配列２２１には、順序集合２１０のＯＳ値で参照されるＰＶとして、“２”であるものが２つ存在する。したがって、存在数配列２６０の要素番号“２”の位置には“２”が設定される。
【００８３】
（２）テーブル抽出部１５０は、存在数配列２６０に基づいて累計配列２７０を生成する。累計配列２７０の要素番号“ｎ”（ｎは１以上の整数）の要素は、存在数配列２６０の要素番号“０〜（ｎ−１）”の要素の累積値である。ただし、累計配列２７０の要素番号“０”の要素は“０”とする。
【００８４】
例えば、累計配列２７０の要素番号“１”の要素は存在数配列２６０の要素番号“０”の要素と等しく“０”である。また、累計配列２７０の要素番号“２”の要素は存在数配列２６０の要素番号“０”，“１”の要素の和であり“０＋１＝１”である。また、累計配列２７０の要素番号“２”の要素は存在数配列２６０の要素番号“０”〜“２”の要素の和であり“０＋１＋２＝３”である。
【００８５】
（３）テーブル抽出部１５０は、終了位置配列２８０を生成する。終了位置配列２８０は、初期の段階では累計配列２７０と同一である。終了位置配列２８０は、ソート用配列２９０の生成に用いる配列である。
【００８６】
（４）テーブル抽出部１５０は、順序集合２１０および終了位置配列２８０に基づいてソート用配列２９０を生成する。具体的には、テーブル抽出部１５０は、順序集合２１０のＯＳ値を要素番号の順に取り出す。そのＯＳ値が示すポインタ配列２２１中のＰＶにより終了位置配列２８０を参照し、その要素を取得する。テーブル抽出部１５０は、取得した要素を、ソート用配列２９０の順序集合２１０の要素番号と同一の要素番号における要素として設定する。そして、終了位置配列２８０の当該要素をインクリメントする。
【００８７】
例えば、テーブル抽出部１５０は、順序集合２１０の要素番号“０”のＯＳ値“１”によりポインタ配列２２１の要素番号“１”に対応するＰＶ“２”を特定する。次に、ＰＶ“２”により、終了位置配列２８０の要素番号“２”を参照し、その要素“１”を取得する。そして、ソート用配列２９０の要素番号“０”の位置に、取得した要素“１”を設定する。更に、終了位置配列２８０の要素番号“２”の要素“１”をインクリメントして“２”とする。
【００８８】
順序集合２１０の要素番号“１”に関しても同様にして、ソート用配列２９０の要素番号“１”の位置に“０”を設定する。そして、終了位置配列２８０の要素番号“１”の要素“０”をインクリメントして“１”とする。また、順序集合２１０の要素番号“２”に関しても同様にして、ソート用配列２９０の要素番号“２”の位置に“２”を設定する。そして、終了位置配列２８０の要素番号“２”の要素“２”をインクリメントして“３”とする。
【００８９】
（５）テーブル抽出部１５０は、ソート用配列２９０を利用して順序集合２１０の配列要素の順序を変換して順序集合２１１を生成する。具体的には、まず、順序集合２１０の要素番号と同一の要素番号に対応するソート用配列２９０の要素を変換後要素番号として取得する。そして、順序集合２１０の当該要素番号に対応する要素を、順序集合２１１の変換後要素番号と同一の要素番号の位置に設定する。
【００９０】
例えば、順序集合２１０の要素番号“０”で示されるレコードに対応するソート用配列２９０の要素は“１”である。よって、順序集合２１０の要素番号“０”に対応するＯＳ値“１”を順序集合２１１の要素番号“１”の位置に設定する。また、順序集合２１０の要素番号“１”で示されるレコードに対応するソート用配列２９０の要素は“０”である。よって、順序集合２１０の要素番号“１”に対応するＯＳ値“２”を順序集合２１１の要素番号“０”に設定する。また、順序集合２１０の要素番号“２”で示されるレコードに対応するソート用配列２９０の要素は“２”である。よって、順序集合２１０の要素番号“２”に対応するＯＳ値“３”を順序集合２１１の要素番号“２”の位置に設定する。
【００９１】
このようにして、テーブル抽出部１５０は、順序集合２１０を商品名を示す値リスト２２２に関してソートした配列である順序集合２１１を得ることができる。
図１２は、出庫テーブルのソート処理の具体例を示す図である。なお、具体的な手順に関しては、商品テーブルのソート処理と同一であるため、その説明を省略する。そのソート処理の過程において、存在数配列３４０、累計配列３５０、終了位置配列３６０およびソート用配列３７０が生成される。ここで、存在数配列３４０は、図１１で説明した存在数配列２６０に対応する。累計配列３５０は、累計配列２７０に対応する。終了位置配列３６０は、終了位置配列２８０に対応する。ソート用配列３７０は、ソート用配列２９０に対応する。
【００９２】
テーブル抽出部１５０は、ソート用配列３７０に基づいて、順序集合３１０を商品名を示す値リスト３２２に関してソートした配列である順序集合３１１を得ることができる。
テーブル抽出部１５０は、順序集合２１１，３１１および累計配列３５０を累計配列生成部１６０に出力する。
【００９３】
図１３は、結合テーブルにおけるマスタ側配列要素の累計配列を示す図である。累計配列生成部１６０は、テーブル抽出部１５０からソート処理により得られた順序集合２１１，３１１および累計配列３５０を結合テーブルを構成する配列の一部として取得する。ただし、累計配列生成部１６０は累計配列３５０を新たに生成してもよい。
【００９４】
また、累計配列生成部１６０は、結合時にマスタ側となる順序集合（マスタ側配列）の各レコードにつき、スレイブ側となる順序集合（スレイブ側配列）のレコードが何個存在するかを示し、順序集合２１１と同サイズである存在数配列２６０ａを生成する。また、累計配列生成部１６０は、存在数配列２６０ａを累計化した累計配列２７０ａを生成する。
【００９５】
ここで、マスタ側配列は引当処理の対象とする処理項目を含むレコードの各配列を示している。本例では、商品テーブルを示す配列がマスタ側となる。他方、出庫テーブルを示す配列はスレイブ側となる。
【００９６】
累計配列生成部１６０は、次のようにして存在数配列２６０ａおよび累計配列２７０ａを生成することができる。
（１）累計配列生成部１６０は、順序集合２１１の各要素番号に対応するＯＳ値を順次取得し、当該ＯＳ値で示される商品名の値リスト２２２へのポインタ配列２２１のＰＶを参照する。そして、当該ＰＶで示されるスレイブ側の存在数配列３４０の要素を取得し、取得した要素を存在数配列２６０ａの順序集合２１１の要素番号に対応する要素番号の位置に設定する。
【００９７】
例えば、累計配列生成部１６０は、順序集合２１１の要素番号“０”のＯＳ値“２”を取得する。次に、当該ＯＳ値“２”で示されるポインタ配列２２１のＰＶ“１”を取得する。そして、ＰＶ“１”で示される存在数配列３４０の要素“１”を取得する。更に取得した要素を存在数配列２６０ａの要素番号“０”の位置に設定する。順序集合２１１の要素番号“１”に関しても同様の参照を行うことにより、存在数配列２６０ａの要素番号“１”の位置に“１”が設定される。また、順序集合２１１の要素番号“２”に関しても同様の参照を行うことにより、存在数配列２６０ａの要素番号“２”の位置に“１”が設定される。
【００９８】
（２）累計配列生成部１６０は、存在数配列２６０ａに基づいて、累計配列２７０ａを生成する。生成方法は、図１１で説明した累計配列２７０の生成方法と同一である。すなわち、累計配列２７０ａの要素番号“０”の要素は“０”となる。累計配列２７０ａの要素番号“１”の要素は存在数配列２６０ａの要素番号“０”の要素と等しく“１”である。累計配列２７０ａの要素番号“２”の要素は存在数配列２６０ａの要素番号“０”，“１”の要素の和であり“１＋１＝２”である。累計配列２７０ａの要素番号“３”の要素は存在数配列２６０ａの要素番号“０”〜“２”の要素の和であり“１＋１＋１＝３”である。
【００９９】
累計配列生成部１６０は、このようにして累計配列２７０ａを取得する。累計配列２７０ａは結合テーブルを構成する配列の一部である。
累計配列生成部１６０は、このようにして順序集合２１１，３１１および累計配列２７０ａ，３５０を結合テーブルを構成する配列として取得することができる。
【０１００】
演算処理部１７０は、これらの配列を用いて引当のための演算を実行する。
次に、当該演算の前処理となる引当値設定処理を説明する。以下の引当値設定処理は、図１０のステップＳ２５に対応する。
【０１０１】
図１４は、引当値設定処理を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。
［ステップＳ３１］演算処理部１７０は、作業領域となる引当値配列を生成する。引当値配列は、各商品につき総引当数量から引当済数量を引いた残引当数量を記憶するための配列である。
【０１０２】
［ステップＳ３２］演算処理部１７０は、出庫テーブルからレコード（出庫レコードと称する）を１つ取得する。例えば、出庫テーブルを示す順序集合３１１の要素番号“０”に対応する出庫レコードを取得する。
【０１０３】
［ステップＳ３３］演算処理部１７０は、引当値配列の対応する要素番号の位置に出庫レコードに設定された出庫数を設定する。例えば、出庫テーブルを示す順序集合３１１の要素番号“０”に対応する出庫レコードに含まれる出庫数“１０”を引当値配列の要素番号“０”の位置に設定する。
【０１０４】
［ステップＳ３４］演算処理部１７０は、出庫テーブルに含まれる全ての出庫レコードにつき引当値配列の設定処理が終了したか否かを判定する。終了した場合、本処理を終了する。終了していない場合、処理をステップＳ３２に進める。演算処理部１７０は、例えば順序集合３１１の要素番号の昇順に本処理を実行し、最後の要素番号に到達したか否かを検知することで、ステップＳ３４の判定を行うことができる。
【０１０５】
このようにして、演算処理部１７０は引当値を設定した引当値配列を生成する。
図１５は、引当値設定処理の具体例を示す図である。図１５中（Ａ）は上記ステップＳ３１に対応する。（Ｂ）は上記ステップＳ３２，３３に対応する。（Ｃ）は引当値設定処理の結果を示す。以下、順を追って説明する。
【０１０６】
（Ａ）演算処理部１７０は、順序集合３１１と同サイズの引当値配列４００を作業領域として生成する。
（Ｂ）演算処理部１７０は、順序集合３１１に基づいて、出庫数を示す情報ブロック３３０の値リスト３３２の設定値を取得する。そして、参照した順序集合３１１の要素番号と同一の要素番号で示される引当値配列４００内の配列要素に値リスト３３２の設定値を設定する。
【０１０７】
例えば、演算処理部１７０は、順序集合３１１の要素番号“０”に対応するＯＳ値“２”により、ポインタ配列３３１のＰＶ“１”を取得する。そして、当該ＰＶ“１”で示される値リスト３３２のＶＬ“１０”を取得する。更に、演算処理部１７０は、当該ＶＬ“１０”を引当値配列４００の要素番号“０”の位置に設定する。また、演算処理部１７０は、順序集合３１１の要素番号“１”に対応するレコードに関しても、同様に値リスト３３２の参照を行うことで、引当値配列４００の要素番号“１”の位置に“２５”を設定する。
【０１０８】
その結果、演算処理部１７０は、（Ｃ）に示す引当値配列４００を取得できる。
演算処理部１７０は、引当値配列４００と商品テーブルとに基づいて、以下に示す変換テーブル生成処理を行う。
【０１０９】
次に、図１０のステップＳ２６の変換テーブル生成処理を詳細に説明する。
図１６は、変換テーブル生成処理を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１１０】
［ステップＳ４１］演算処理部１７０は、処理レコード数を示す変数ＮをＮ＝１に設定する。
［ステップＳ４２］演算処理部１７０は、累計配列２７０ａを参照して、結合テーブル中、次に処理すべきレコードを特定する。演算処理部１７０は、例えば累計配列２７０ａの要素を要素番号にしたがって昇順に参照する。演算処理部１７０は、順序集合２１１について、累計配列２７０ａの要素と等しい要素番号に対応するレコードを次に処理すべきレコードとして特定できる。
【０１１１】
［ステップＳ４３］演算処理部１７０は、Ｎが同一の値である間は所定の優先順位に基づいて、引当元とする倉庫を選択する。ここで、上述した通りＡ倉庫はＢ倉庫よりも優先して処理対象となる。例えば、Ｎ＝１で最初にＡ倉庫につき処理を行った後、Ｎ＝１の状態で次に当該ステップの処理を行う際にはＢ倉庫を選択する。また、演算処理部１７０は、Ｎをインクリメントした後、初めて当該ステップの処理を行う際は、Ａ倉庫を選択する。
【０１１２】
［ステップＳ４４］演算処理部１７０は、ステップＳ４２で特定したレコードにつき、ステップＳ４３で選択した倉庫から在庫数を取得する。
［ステップＳ４５］演算処理部１７０は、引当値配列４００の要素番号Ｉ（Ｎ）を算出する。ここで、引当値配列４００につき要素番号Ｉ（Ｎ）に対応する位置に設定された値は、ステップＳ４２で選択したレコードに含まれる商品についての引当値であり、それまでの引当結果を反映した残引当数量である。演算処理部１７０は、Ｉ（Ｎ）を算出するために、次の値を取得する。
【０１１３】
（１）ステップＳ４２で取得した累計配列２７０ａの要素値Ｍ。
（２）処理レコード数Ｎ。
（３）ステップＳ４２で選択した順序集合２１１のＯＳ値が指し示すポインタ配列２２１のＰＶによって参照される累計配列３５０の要素値Ｓ。
【０１１４】
そして、演算処理部１７０は、これらの値を用いて、
Ｉ（Ｎ）＝Ｍ−Ｎ＋１＋Ｓ  ・・・  （式１）
を算出する。
【０１１５】
［ステップＳ４６］演算処理部１７０は、引当値配列４００の要素番号Ｉ（Ｎ）に対応する引当値を取得する。
［ステップＳ４７］演算処理部１７０は、ステップＳ４４で取得した在庫値がステップＳ４６で取得した引当値よりも小さいか否かを判定する。小さい場合、処理をステップＳ４８に進める。在庫値が引当値以上である場合、処理をステップＳ５０に進める。
【０１１６】
［ステップＳ４８］演算処理部１７０は、引当値配列４００の要素番号Ｉ（Ｎ）に対応する位置に“残引当値＝引当値−在庫値”の値を設定する。
［ステップＳ４９］演算処理部１７０は、ステップＳ４２で選択したレコードに含まれる全ての引当元について処理を完了しており、同レコードに含まれる次の引当元の選択が不可であるかを判定する。不可である場合、処理をステップＳ５３に進める。次の引当元の選択が可能である場合、処理をステップＳ４３に進める。なお、演算処理部１７０は、本例では同一のＮにつきＢ倉庫まで処理を行った場合には、全ての引当元について処理を完了しているので、次の引当元の選択が不可であると判定する。一方、Ａ倉庫について処理を行った場合には、次にＢ倉庫を選択できるので次の引当元の選択が不可ではないと判定する。
【０１１７】
［ステップＳ５０］演算処理部１７０は、引当値配列４００の要素番号Ｉ（Ｎ）に対応する引当値を“０”に設定する。
［ステップＳ５１］演算処理部１７０は、在庫値の変換後の値を算出する。すなわち、“変換後在庫値＝在庫値−引当値”を算出する。
【０１１８】
［ステップＳ５２］演算処理部１７０は、変換テーブルに変換内容を記録する。具体的には、演算処理部１７０は、ステップＳ４２で選択したレコードを示す順序集合２１１のＯＳ値、ステップＳ４３で引当元として選択した倉庫を示すインデックス値（ＩＤＸと表記する）およびステップＳ５１で算出した変換後在庫値を変換テーブルに設定する。
【０１１９】
［ステップＳ５３］演算処理部１７０は、結合テーブルの全レコードを処理済であるか否かを判定する。処理済である場合、処理を終了する。処理済でない場合、処理をステップＳ５４に進める。
【０１２０】
［ステップＳ５４］演算処理部１７０は、Ｎをインクリメントする。そして、処理をステップＳ４２に進める。
このようにして、演算処理部１７０は引当値配列４００を更新しながら在庫数の更新内容を変換テーブルに記録する。演算処理部１７０は、上記（式１）で算出された要素番号Ｉ（Ｎ）により引当値配列４００を参照することで、ある商品につき引当値配列４００の当該商品に対応する要素を固定的に取得することができる。
【０１２１】
なお、上記ステップＳ４９からステップＳ５３に遷移し、ステップＳ５３で全レコードを処理済と判定する場合、最後に処理を行った引当元およびＮの値に対応付けて変換テーブルに変換後在庫値“０”を設定する。
【０１２２】
また、上記ステップＳ５３において、引当値配列４００において、全ての引当値が“０”となった時点で処理を完了してもよい。このようにすれば、処理コストをより軽減できる。
【０１２３】
次に上記変換テーブル生成処理の具体例を説明する。
図１７は、変換テーブル生成処理の具体例を示す第１の図である。演算処理部１７０は、次のようにして引当処理の履歴を記録することで、変換用データとして変換テーブル５００を生成する。以下の具体例は、図１５までの説明で得られた結合テーブルおよび引当値配列４００に基づく処理である。
【０１２４】
（１）演算処理部１７０は、累計配列２７０ａの要素番号位置を昇順に参照し、累計値Ｍにより順序集合２１１を参照して、ＯＳ値を取得する。まず、演算処理部１７０は、累計配列２７０ａの要素番号“０”の要素につき累計値“Ｍ＝０”を取得する。そして、順序集合２１１につき要素番号“Ｍ＝０”の位置のＯＳ値“２”を取得する。なお、この場合、最初のレコードの処理となるので、処理レコード数“Ｎ＝１”である。
【０１２５】
（２）演算処理部１７０は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、まずＡ倉庫を引当元として選択する。
（３）演算処理部１７０は、取得したＯＳ値によりＡ倉庫の情報ブロック２４０から対応する在庫値を取得する。演算処理部１７０は、ＯＳ値“２”によりポインタ配列２４１を参照し、ＰＶ“２”を取得する。演算処理部１７０は、ＰＶ“２”により値リスト２４２を参照し、在庫値“２０”を取得する。
【０１２６】
（４）演算処理部１７０は、商品名の情報ブロック２２０のポインタ配列２２１からＯＳ値に対応するＰＶを取得する。そして、当該ＰＶにより累計配列３５０を参照し、累計値Ｓを取得する。具体的には、演算処理部１７０は、ＯＳ値“２”によりポインタ配列２２１を参照し、ＰＶ“１”を取得する。演算処理部１７０は、ＰＶ“１”により累計配列３５０を参照し、累計値“Ｓ＝０”を取得する。
【０１２７】
（５）演算処理部１７０は、上記（式１）によりＩ（Ｎ）を算出する。具体的には、Ｉ（１）＝Ｍ−Ｎ＋１＋Ｓ＝０−１＋１＋０＝０と算出できる。
（６）演算処理部１７０は、Ｉ（Ｎ）を要素番号として、引当値配列４００を参照し、引当値を取得する。具体的には、Ｉ（１）＝０の要素番号で示される引当値“１０”を取得する。
【０１２８】
（７）演算処理部１７０は、（３）で取得した在庫値と（６）で取得した引当値とを比較する。ここでは、在庫値“２０”は引当値“１０”よりも大きい、すなわち、在庫値は引当値よりも小さくない。よって、引当値配列４００の要素番号Ｉ（１）＝０で示される位置に引当値“０”を設定する。そして、“変換後在庫値＝２０−１０＝１０”を算出し、変換テーブル５００に、（１）で取得したＯＳ値“２”、Ａ倉庫のＩＤＸ“１”、変換後在庫値（ＶＬ）“１０”を設定する。
【０１２９】
そして、次のレコードに遷移する。
図１８は、変換テーブル生成処理の具体例を示す第２の図である。演算処理部１７０は、図１７の処理に引き続き図１８の処理を実行する。
【０１３０】
（１）演算処理部１７０は、次に累計配列２７０ａの要素番号“１”の要素につき累計値“Ｍ＝１”を取得する。そして、順序集合２１１につき要素番号“Ｍ＝１”の位置のＯＳ値“１”を取得する。なお、この場合、２つ目のレコードの処理となるので、処理レコード数“Ｎ＝２”である。
【０１３１】
（２）演算処理部１７０は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、まずＡ倉庫を引当元として選択する。
（３）演算処理部１７０は、取得したＯＳ値によりＡ倉庫の情報ブロック２４０から対応する在庫値を取得する。演算処理部１７０は、ＯＳ値“１”によりポインタ配列２４１を参照し、ＰＶ“１”を取得する。演算処理部１７０は、ＰＶ“１”により値リスト２４２を参照し、在庫値“１０”を取得する。
【０１３２】
（４）演算処理部１７０は、商品名の情報ブロック２２０のポインタ配列２２１からＯＳ値に対応するＰＶを取得する。そして、当該ＰＶにより累計配列３５０を参照し、累計値Ｓを取得する。具体的には、演算処理部１７０は、ＯＳ値“１”によりポインタ配列２２１を参照し、ＰＶ“２”を取得する。演算処理部１７０は、ＰＶ“２”により累計配列３５０を参照し、累計値“Ｓ＝１”を取得する。
【０１３３】
（５）演算処理部１７０は、上記（式１）によりＩ（Ｎ）を算出する。具体的には、Ｉ（２）＝Ｍ−Ｎ＋１＋Ｓ＝１−２＋１＋１＝１と算出できる。
（６）演算処理部１７０は、Ｉ（Ｎ）を要素番号として、引当値配列４００を参照し、引当値を取得する。具体的には、Ｉ（２）＝１の要素番号で示される引当値“２５”を取得する。
【０１３４】
（７）演算処理部１７０は、（３）で取得した在庫値と（６）で取得した引当値とを比較する。ここでは、在庫値“１０”は引当値“２５”よりも小さい。よって、引当値配列４００の要素番号Ｉ（２）＝１で示される位置に引当値“２５−１０＝１５”を設定する。ここで、在庫値が引当値よりも小さい場合には変換テーブル５００に設定を行わない。これにより、メモリ資源の使用量を軽減できる。また、後段のフィールド更新処理を効率的に行うことができる。
【０１３５】
そして、次に選択可能な引当元が存在するので、同一レコードの次の引当元による処理に遷移する。
図１９は、変換テーブル生成処理の具体例を示す第３の図である。演算処理部１７０は、図１８の処理に引き続き図１９の処理を実行する。
【０１３６】
（１）演算処理部１７０は、累計配列２７０ａの要素番号“１”の要素につき累計値“Ｍ＝１”を取得している。そして、順序集合２１１につき要素番号“Ｍ＝１”の位置のＯＳ値“１”を取得している。なお、図１８に引き続き２つ目のレコードの処理となるので、依然として処理レコード数“Ｎ＝２”である。
【０１３７】
（２）演算処理部１７０は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、Ａ倉庫は処理済なので次の引当元としてＢ倉庫を選択する。
【０１３８】
（３）演算処理部１７０は、取得したＯＳ値によりＢ倉庫の情報ブロック２５０から対応する在庫値を取得する。演算処理部１７０は、ＯＳ値“１”によりポインタ配列２５１を参照し、ＰＶ“１”を取得する。演算処理部１７０は、ＰＶ“１”により値リスト２５２を参照し、在庫値“１０”を取得する。
【０１３９】
（４）演算処理部１７０は、商品名の情報ブロック２２０のポインタ配列２２１からＯＳ値に対応するＰＶを取得する。そして、当該ＰＶにより累計配列３５０を参照し、累計値Ｓを取得する。具体的には、演算処理部１７０は、ＯＳ値“１”によりポインタ配列２２１を参照し、ＰＶ“２”を取得する。演算処理部１７０は、ＰＶ“２”により累計配列３５０を参照し、累計値“Ｓ＝１”を取得する。
【０１４０】
（５）演算処理部１７０は、上記（式１）によりＩ（Ｎ）を算出する。具体的には、Ｉ（２）＝Ｍ−Ｎ＋１＋Ｓ＝１−２＋１＋１＝１と算出できる。
（６）演算処理部１７０は、Ｉ（Ｎ）を要素番号として、引当値配列４００を参照し、引当値を取得する。具体的には、Ｉ（２）＝１の要素番号で示される引当値“１５”を取得する。
【０１４１】
（７）演算処理部１７０は、（３）で取得した在庫値と（６）で取得した引当値とを比較する。ここでは、在庫値“１０”は引当値“１５”よりも小さい。よって、引当値配列４００の要素番号Ｉ（２）＝１で示される位置に引当値“１５−１０＝５”を設定する。
【０１４２】
そして、次に選択可能な引当元が存在しないので、次のレコードに遷移する。
図２０は、変換テーブル生成処理の具体例を示す第４の図である。演算処理部１７０は、図１９の処理に引き続き図２０の処理を実行する。
【０１４３】
（１）演算処理部１７０は、次に累計配列２７０ａの要素番号“２”の要素につき累計値“Ｍ＝２”を取得する。そして、順序集合２１１につき要素番号“Ｍ＝２”の位置のＯＳ値“３”を取得する。なお、この場合、３つ目のレコードの処理となるので、処理レコード数“Ｎ＝３”である。
【０１４４】
（２）演算処理部１７０は、当該レコード中で選択可能な引当元のうち最も優先される引当元を選択する。ここでは、まずＡ倉庫を引当元として選択する。
（３）演算処理部１７０は、取得したＯＳ値によりＡ倉庫の情報ブロック２４０から対応する在庫値を取得する。演算処理部１７０は、ＯＳ値“３”によりポインタ配列２４１を参照し、ＰＶ“２”を取得する。演算処理部１７０は、ＰＶ“２”により値リスト２４２を参照し、在庫値“２０”を取得する。
【０１４５】
（４）演算処理部１７０は、商品名の情報ブロック２２０のポインタ配列２２１からＯＳ値に対応するＰＶを取得する。そして、当該ＰＶにより累計配列３５０を参照し、累計値Ｓを取得する。具体的には、演算処理部１７０は、ＯＳ値“３”によりポインタ配列２２１を参照し、ＰＶ“２”を取得する。演算処理部１７０は、ＰＶ“２”により累計配列３５０を参照し、累計値“Ｓ＝１”を取得する。
【０１４６】
（５）演算処理部１７０は、上記（式１）によりＩ（Ｎ）を算出する。具体的には、Ｉ（３）＝Ｍ−Ｎ＋１＋Ｓ＝２−３＋１＋１＝１と算出できる。
（６）演算処理部１７０は、Ｉ（Ｎ）を要素番号として、引当値配列４００を参照し、引当値を取得する。具体的には、Ｉ（３）＝１の要素番号で示される引当値“５”を取得する。
【０１４７】
（７）演算処理部１７０は、（３）で取得した在庫値と（６）で取得した引当値とを比較する。ここでは、在庫値“２０”は引当値“５”よりも大きい、すなわち、在庫値は引当値よりも小さくない。よって、引当値配列４００の要素番号Ｉ（３）＝１で示される位置に引当値“０”を設定する。そして、“変換後在庫値＝２０−５＝１５”を算出し、変換テーブル５００に、（１）で取得したＯＳ値“３”、Ａ倉庫のＩＤＸ“１”、変換後在庫値（ＶＬ）“１５”を設定する。
【０１４８】
そして、演算処理部１７０は、全てのレコードにつき処理を完了したので、変換テーブル生成処理を終了する。演算処理部１７０は、生成した変換テーブル５００を変換用データ記憶部１２０に格納する。
【０１４９】
次に、データ更新部１８０は演算処理部１７０による変換テーブル生成処理が完了すると、変換用データ記憶部１２０に記憶された変換テーブル５００に基づいて、フィールド更新処理を行う。以下、図１０のステップＳ２７のフィールド更新処理を詳細に説明する。
【０１５０】
図２１，２２は、フィールド更新処理を示すフローチャートである。以下、図２１，２２に示す処理をステップ番号に沿って説明する。
［ステップＳ６１］データ更新部１８０は、累計配列２７０を取得する。データ更新部１８０は、テーブル抽出部１５０がソート処理の際に生成した累計配列２７０を保持してもよいし、再度生成してもよい。
【０１５１】
［ステップＳ６２］データ更新部１８０は、変換テーブル５００に基づき、各引当元について値リストの補完を行う。具体的には、データ更新部１８０は、変換テーブル５００に存在してＡ倉庫やＢ倉庫の値リスト２４２，２５２に存在しない値を各値リストに追加する。なお、このとき、各値リストに基底値“０”が存在しない場合、“０”を追加する。
【０１５２】
［ステップＳ６３］データ更新部１８０は、各引当元の値リストの補完に応じて、ポインタ配列を更新する。具体的には、データ更新部１８０は、同一レコードの項目値（在庫値）が補完前後で同一となるようポインタ配列の値を変更する。
【０１５３】
［ステップＳ６４］データ更新部１８０は、変換テーブル５００に設定された変換後在庫値のポインタ配列（以下、変換用ポインタ配列と称する）を生成する。当該生成処理の詳細は後述する。
【０１５４】
［ステップＳ６５］データ更新部１８０は、商品テーブルを示す順序集合２１１の最初の要素番号を示すＲ１の値を初期化する。すなわち、“Ｒ１＝０”を設定する。
［ステップＳ６６］データ更新部１８０は、変換テーブル５００の最初の処理対象レコードを指定する行番号Ｒ２に“Ｒ２＝０”を設定する。
【０１５５】
［ステップＳ６７］データ更新部１８０は、順序集合２１１の要素番号Ｒ１に対応するＯＳ値（ＯＳ値（Ｒ１）と称する）を取得する。また、データ更新部１８０は、変換テーブル５００の行番号Ｒ２に対応するＯＳ値（ＯＳ値（Ｒ２）と称する）を取得する。データ更新部１８０は、ＯＳ値（Ｒ１）がＯＳ値（Ｒ２）よりも小さいか否かを判定する。小さい場合、処理をステップＳ６８に進める。小さくない場合、処理をステップＳ７０に進める。
【０１５６】
［ステップＳ６８］データ更新部１８０は、順序集合２１１のＯＳ値（Ｒ１）でＡ倉庫、Ｂ倉庫を示す情報ブロック２４０，２５０に含まれるポインタ配列２４１，２５１を参照する。データ更新部１８０は、参照したポインタ配列２４１，２５１のＰＶを値リスト２４２，２５２中のＶＬ“０”を指し示すＰＶに変更する。
【０１５７】
［ステップＳ６９］データ更新部１８０は、Ｒ１をインクリメントする。そして、処理をステップＳ６７に進める。
［ステップＳ７０］データ更新部１８０は、変数Ｃ＝１を設定する。変数Ｃは、商品テーブルにおいて、Ａ倉庫、Ｂ倉庫に対応する列を示す変数である。
【０１５８】
［ステップＳ７１］データ更新部１８０は、変換テーブル５００の行番号Ｒ２に対応するＩＤＸ値を取得する。そして、データ更新部１８０は、ＣがＩＤＸと等しいか否かを判定する。等しい場合、処理をステップＳ７２に進める。等しくない場合、処理をステップＳ７６に進める。ここで、本例では上述したようにＩＤＸ＝１は、Ａ倉庫に対応する。また、ＩＤＸ＝２はＢ倉庫に対応する。
【０１５９】
［ステップＳ７２］データ更新部１８０は、変換用ポインタ配列に基づいて、当該ＩＤＸに対応する引当元のポインタ配列の要素番号“Ｒ１”の位置のＰＶを変更する。
［ステップＳ７３］データ更新部１８０は、累計配列２７０に含まれる累計値のうち、Ｒ１より大きい最小の累計値を取得する。そして、Ｒ１に取得した累計値を設定する。
【０１６０】
［ステップＳ７４］データ更新部１８０は、順序集合２１１につき要素番号“Ｒ１”に対応する順序集合２１１の要素（すなわち、ＯＳ値）が存在するか否かを判定する。存在する場合、処理をステップＳ７５に進める。存在しない場合、処理を終了する。
【０１６１】
［ステップＳ７５］データ更新部１８０は、行番号Ｒ２をインクリメントする。そして、処理をステップＳ６７に進める。
［ステップＳ７６］データ更新部１８０は、引当元の情報ブロックであって、Ｃの値のＩＤＸに対応する情報ブロックに含まれるポインタ配列のＯＳ値（Ｒ１）で指示される位置のＰＶを値リスト中のＶＬ“０”を指し示すＰＶに変更する。なお、上記ステップＳ６８では、Ａ倉庫、Ｂ倉庫の情報ブロック２４０，２５０に含まれるポインタ配列２４１，２５１を共に変更するが、本ステップＳ７６では、何れかのポインタ配列のみが処理対象である点が異なっている。本例では、ステップＳ７６においてＡ倉庫のポインタ配列２４１のみが処理対象となる。
【０１６２】
［ステップＳ７７］データ更新部１８０は、Ｃをインクリメントする。そして、処理をステップＳ７１に進める。
このように、データ更新部１８０は変換テーブル５００を参照して、情報ブロック２４０，２５０に引当の演算結果を反映する。
【０１６３】
ここで、ステップＳ６８のように、ＯＳ値（Ｒ１）がＯＳ値（Ｒ２）よりも小さい場合に、全ての倉庫を“０”に設定するよう処理することで、処理を効率化できる。また、変換テーブル５００で保持すべきデータ量を軽減できる。
【０１６４】
なお、上記ステップＳ７４において、データ更新部１８０は処理完了の判定を、変換テーブル５００に未処理のレコードが存在するか否かによって判定してもよい。その判定の結果、未処理のレコードが存在する場合、処理をステップＳ７５に進める。そして、未処理のレコードが存在しない、すなわち、全レコードについて処理を終了したと判定する場合、処理を完了する。本判定は、例えば行番号Ｒ２が最大値であるか否かによって行うことができる。ここで、行番号Ｒ２の最大値とは、変換テーブル５００に含まれる行数−１である。変換テーブル５００の例では、当該最大値は“１”である。行番号Ｒ２が最大値に達している場合、全レコードについて処理を終了したと検知できる。
【０１６５】
以下では、上記フィールド更新処理の具体例を説明する。
図２３は、累計配列の取得処理の具体例を示す図である。データ更新部１８０は、累計配列２７０を取得する。ここで、累計配列２７０の生成方法は、図１１の（１）、（２）で説明した、累計配列生成部１６０の手順と同様である。このため、ここではその説明を省略する。なお、データ更新部１８０は、累計配列生成部１６０が生成した累計配列２７０を累計配列生成部１６０から予め取得して保持してもよい。
【０１６６】
次に、変換テーブル５００および累計配列２７０を用いた情報ブロックの変換処理の具体例を説明する。
以下に示す図２４〜３０は、フィールド更新処理の具体例を示している。以下では、図２４〜３０に示す処理をステップ番号に沿って説明する。
【０１６７】
図２４は、フィールド更新処理の具体例を示す第１の図である。
［ステップＳＴ１１］データ更新部１８０は、変換用データ記憶部１２０を参照して、変換テーブル５００を取得する。なお、本例では、変換テーブル５００にはＩＤＸ“１”のレコードが含まれる。このため、以降の処理の流れを把握し易いように、Ａ倉庫を示す情報ブロック２４０も図示している。
【０１６８】
［ステップＳＴ１２］データ更新部１８０は、変換テーブル５００に含まれる在庫値（ＶＬ）のうち、値リスト２４２に含まれていない値を取得する。本例では、そのようなＶＬとして“１５”が存在する。よって、データ更新部１８０は値リスト２４２に“１５”を追加する。また、値リスト２４２には、基底値“０”が含まれていないので、データ更新部１８０は値リスト２４２に“０”を追加する。ここで、Ｂ倉庫に関する値リスト２５２にも基底値“０”が存在しないので、データ更新部１８０はＡ倉庫と同様に値リスト２５２に“０”を追加する。
【０１６９】
図２５は、フィールド更新処理の具体例を示す第２の図である。以下、図２４に引き続き実行される処理を説明する。
［ステップＳＴ１３］データ更新部１８０は、値リスト２４２のＶＬの補完前後で、ポインタ配列２４１の各ＰＶで指示される在庫値が同一となるようＰＶを変更する。具体的には、データ更新部１８０はポインタ配列２４１の要素番号“１”のＰＶにつき、ＶＬ補完前に指示していた“１０”を、ＶＬ補完後にも指示するように当該ＰＶを“１”から“２”に変更する。同様に、ポインタ配列２４１の要素番号“２”のＰＶにつき、ＶＬ補完前に指示していた“２０”を、ＶＬ補完後にも指示するように当該ＰＶを“２”から“４”に変更する。また、ポインタ配列２４１の要素番号“３”のＰＶにつき、ＶＬ補完前に指示していた“２０”を、ＶＬ補完後にも指示するように当該ＰＶを“２”から“４”に変更する。
【０１７０】
なお、ステップＳＴ１２においてデータ更新部１８０は、値リスト２５２にも“０”を追加しているので、ポインタ配列２５１に対しても同様にＰＶの変更を行う。
［ステップＳＴ１４］データ更新部１８０は、変換テーブル５００および値リスト２４２に基づいて、変換用ポインタ配列６００を生成する。具体的には、データ更新部１８０は、まず、変換テーブル５００の行番号“Ｒ２＝０”の変換レコードを参照する。そして、同変換レコードにつきＩＤＸ“１”およびＶＬ“１０”を特定する。更に、ＩＤＸ“１”に対応する情報ブロック２４０を参照し、値リスト２４２からＶＬ“１０”の位置を示す要素番号“２”を取得する。そして、変換用ポインタ配列６００の要素番号“Ｒ２＝０”の位置に当該要素番号“２”をＰＶとして設定する。これにより、変換テーブル５００の行番号“Ｒ２＝０”の変換レコードのための変換用ポインタ配列６００の要素が決定される。そして、データ更新部１８０は、変換テーブル５００の次の行の変換レコードを処理する。すなわち、行番号“Ｒ２＝１”の変換レコードにつきＩＤＸ“１”およびＶＬ“１５”を特定する。更に、ＩＤＸ“１”に対応する情報ブロック２４０を参照し、値リスト２４２からＶＬ“１５”の位置を示す要素番号“３”を取得する。そして、変換用ポインタ配列６００の要素番号“Ｒ２＝１”の位置に当該要素番号“３”をＰＶとして設定する。これにより、変換テーブル５００の行番号“Ｒ２＝１”の変換レコードのための変換用ポインタ配列６００の要素が決定される。
【０１７１】
当該ステップＳＴ１４までの処理によって、図２１に示したステップＳ６４までの処理が完了する。以降、データ更新部１８０は、情報ブロック２４０，２５０の各ポインタ配列におけるＰＶを更新する。
【０１７２】
図２６は、フィールド更新処理の具体例を示す第３の図である。以下、図２５に引き続き実行される処理を説明する。
［ステップＳＴ１５］データ更新部１８０は、最初の商品の在庫値のフィールド更新を行う。フィールド更新は、順序集合２１１の要素番号の昇順に行う。また、フィールド更新は同一レコード内においては、ＩＤＸの昇順に行う。まず、データ更新部１８０は、順序集合２１１の要素番号“Ｒ１＝０”を取得し、その位置のＯＳ値“２”を取得する。更に、データ更新部１８０は、変換テーブル５００の最初の行番号を示す“Ｒ２＝０”を取得し、当該レコードに含まれるＯＳ値“２”を取得する。そして、データ更新部１８０は、両ＯＳ値を比較する。
【０１７３】
“ＯＳ値（Ｒ１）＝２”と“ＯＳ値（Ｒ２）＝２”とが等しい、すなわち、ＯＳ値（Ｒ１）はＯＳ値（Ｒ２）よりも小さくない。また、変換テーブル５００の当該レコードのＩＤＸ“１”は、現在対象としている情報ブロック２４０のＩＤＸ“１”と一致する。よって、データ更新部１８０は、変換用ポインタ配列６００の要素番号“Ｒ２＝０”に設定された変換用ＰＶ“２”を取得する。データ更新部１８０は、“Ｒ１＝０”に対応するＯＳ値“２”で指示されるＩＤＸ“１”のポインタ配列２４１のＰＶ“４”を変換用ＰＶ“２”に変更する。
【０１７４】
図２７は、フィールド更新処理の具体例を示す第４の図である。以下、図２６に引き続き実行される処理を説明する。
［ステップＳＴ１６］データ更新部１８０は、累計配列２７０を参照して、次の商品のレコードに遷移する。具体的には、データ更新部１８０は累計配列２７０の累計値“１，３”のうち、現在の“Ｒ１＝０”よりも大きく、かつ、最小の累計値“１”を取得する。そして、データ更新部１８０は“Ｒ１＝１”とする。また、データ更新部１８０は、変換テーブル５００の処理対象の行番号Ｒ２をインクリメントし、“Ｒ２＝０＋１＝１”とする。
【０１７５】
図２８は、フィールド更新処理の具体例を示す第５の図である。以下、図２７に引き続き実行される処理を説明する。
［ステップＳＴ１７］データ更新部１８０は、次の商品の在庫値のフィールド更新を行う。データ更新部１８０は、順序集合２１１の要素番号“Ｒ１＝１”の位置のＯＳ値“１”を取得する。更に、データ更新部１８０は、変換テーブル５００の行番号“Ｒ２＝１”に対応するレコードに含まれるＯＳ値“３”を取得する。そして、データ更新部１８０は、両ＯＳ値を比較する。
【０１７６】
“ＯＳ値（Ｒ１）＝１”は“ＯＳ値（Ｒ２）＝３”よりも小さいため、データ更新部１８０は、“Ｒ１＝１”に対応するＯＳ値“１”で指示されるＩＤＸ“１”のポインタ配列２４１のＰＶ“２”を値リスト２４２中“０”を示す要素番号“１”に変更する。また、データ更新部１８０は、“Ｒ１＝１”に対応するＯＳ値“１”で指示されるＩＤＸ“２”のポインタ配列２５１のＰＶ“２”を値リスト２５２中“０”を示す要素番号“１”に変更する。
【０１７７】
そして、データ更新部１８０はＲ１をインクリメントし“Ｒ１＝１＋１＝２”とする。
図２９は、フィールド更新処理の具体例を示す第６の図である。以下、図２８に引き続き実行される処理を説明する。
【０１７８】
［ステップＳＴ１８］データ更新部１８０は、次のレコードの在庫値のフィールド更新を行う。データ更新部１８０は、順序集合２１１の要素番号“Ｒ１＝２”の位置のＯＳ値“３”を取得する。更に、データ更新部１８０は、変換テーブル５００の行番号“Ｒ２＝１”に対応するレコードに含まれるＯＳ値“３”を取得する。そして、データ更新部１８０は、両ＯＳ値を比較する。
【０１７９】
“ＯＳ値（Ｒ１）＝３”と“ＯＳ値（Ｒ２）＝３”とが等しい、すなわち、ＯＳ値（Ｒ１）はＯＳ値（Ｒ２）よりも小さくない。また、変換テーブル５００の当該レコードのＩＤＸ“１”は、現在対象としている情報ブロック２４０のＩＤＸ“１”と一致する。よって、データ更新部１８０は、変換用ポインタ配列６００の要素番号“Ｒ２＝１”に設定された変換用ＰＶ“３”を取得する。データ更新部１８０は、“Ｒ１＝２”に対応するＯＳ値“３”で指示されるＩＤＸ“１”のポインタ配列２４１のＰＶ“４”を変換用ＰＶ“３”に変更する。
【０１８０】
図３０は、フィールド更新処理の具体例を示す第７の図である。以下、図２９に引き続き実行される処理を説明する。
［ステップＳＴ１９］データ更新部１８０は、累計配列２７０を参照して、次の商品のレコードへの遷移を試みる。具体的には、データ更新部１８０は累計配列２７０の累計値“１，３”のうち、現在の“Ｒ１＝２”よりも大きく、かつ、最小の累計値“３”を取得する。そして、データ更新部１８０は“Ｒ１＝３”とする。ここで、データ更新部１８０は、順序集合２１１において“Ｒ１＝３”に対応する要素が存在しないことから、当該フィールド更新処理を終了する。
【０１８１】
このようにして、データ更新部１８０は、情報ブロック２４０，２５０に含まれるポインタ配列２４１，２５１および値リスト２４２，２５２の変換を行う。
図３１は、フィールド更新後の商品テーブルの例を示す図である。図３１では、順序集合２１０によって表される商品テーブルを示している。図７と比較すると、１レコード目の商品名“りんご”につき、引当が行われた結果、Ａ倉庫の項目値が引当前の値“１０”から引当後の値“０”へ変更されたことが分かる。また、Ｂ倉庫の項目値が引当前の値“１０”から引当後の値“０”へ変更されたことが分かる。同様に、２レコード目の商品名“みかん”につき、引当が行われた結果、Ａ倉庫の項目値が引当前の値“２０”から引当後の値“１０”に変更されたことが分かる。更に、３レコード目の商品名“りんご”につき、引当が行われた結果、Ａ倉庫の項目値が引当前の値“２０”から引当後の値“１５”に変更されたことが分かる。
【０１８２】
このように、データ更新部１８０は、Ａ倉庫の情報ブロック２４０およびＢ倉庫の情報ブロック２５０につき引当後の項目値を適正に取得することができる。
データ更新部１８０は、更新後の商品テーブルをデータ管理部１３０に出力する。データ管理部１３０は、更新後の商品テーブルにより、引当処理後の商品の在庫状態を管理することができる。
【０１８３】
データ管理部１３０は、表示処理部１９０からの要求に応じて当該更新後の商品テーブルの表形式データを出力する。表示処理部１９０は、当該表形式データをモニタ１１や端末装置３０に表示させる。
【０１８４】
図３２は、入力コマンドおよび結果表示内容の例を示す図である。（Ａ）は処理要求受付部１４０が受け付けるコマンド５０の引数の例を示している。（Ｂ）は引当処理の結果得られた表形式データである商品テーブル２００ａを例示している。
【０１８５】
（Ａ）に示すコマンド５０では、例えば引数５１，５２，５３，５４，５５を指定することができる。
引数５１は、演算処理の対象とし、演算の結果、変換を施すテーブル（マスタテーブル）を指定する情報を入力するための引数である。本実施の形態の例では、“商品テーブル”を指定する情報である。
【０１８６】
引数５２は、演算処理の対象とするもう一方のテーブル（スレイブテーブル）を指定する情報を入力するための引数である。本実施の形態では、“出庫テーブル”を指定する情報である。
【０１８７】
引数５３は、マスタテーブルの項目のうち参照項目を指定するための引数である。本実施の形態では、“商品名”の項目を指定する情報である。
引数５４は、スレイブテーブルの項目のうち被参照項目を指定するための引数である。本実施の形態では、“商品名”の項目を指定する情報である。
【０１８８】
引数５５は、演算処理の内容（計算式）および処理項目を指定する引数である。本実施の形態では、例えば、“Ｒｅｓｅｒｖｅ（ＲＡＮＧＥ（＠Ａ倉庫，＠Ｂ倉庫），基底値，＠出庫テーブル．出庫数）”という関数が設定される。なお、本例において基底値は“０”である。
【０１８９】
コマンド５０は、例えばユーザが端末装置３０の表示する所定のＧＵＩを操作して、引当対象とすべきテーブルや項目を選択した際に端末装置３０あるいはデータ処理サーバ１００で生成され、処理要求受付部１４０に送信される。なお、ユーザがキーボード１２やマウス１３を用いて直接コマンド５０を入力してもよい。
【０１９０】
また、引数５５に、他の関数等を設定することで、異なる処理を実行することもできる。異なる計算式による変形例に関しては後述する。
（Ｂ）に示す商品テーブル２００ａは、図３１の商品テーブルを表形式に示したものである。表示処理部１９０は、コマンド５０の入力内容により引当処理が完了すると商品テーブル２００ａをモニタ１１あるいは端末装置３０に表示させる。ユーザは、商品テーブル２００ａを視認して、引当結果を確認することができる。
【０１９１】
図３３は、従来のデータ処理方法との比較を示す図である。データ処理サーバ１００では、商品テーブル７００および出庫テーブル８００を管理しているものとする。商品テーブル７００は、表形式の商品テーブル２００を順序集合２１０および情報ブロック２２０，２３０，２４０，２５０に分解したものである。また、出庫テーブル８００は、表形式の出庫テーブル３００を順序集合３１０および情報ブロック３２０，３３０に分解したものである。
【０１９２】
ここで、従来では、レコード単位でしか演算処理を行うことができなかったため、商品テーブル７００から出庫テーブル８００に設定された出庫数で引当処理を行う場合、以下のようにしてその処理を行っていた。
【０１９３】
まず、商品テーブル７００と出庫テーブル８００とを結合して結合テーブル９００を生成する。次に、結合テーブル９００を例えばＣＳＶ（Comma Separated Values）形式のテキストデータなどで出力した結合データファイル９１０を取得する。次に、結合データファイル９１０をＤＢサーバ２０のＲＤＢに読み込んでＲＤＢ上の結合テーブル９２０に所定のアプリケーションによる引当処理を行う。次に、その結果を例えばＣＳＶ形式のテキストデータなどで出力した引当後データファイル９３０を取得する。そして、引当後データファイル９３０を各成分に分解したテーブルとしてデータ処理サーバ１００に読み込む。そして、引当後の商品テーブル７００ａを得る。
【０１９４】
しかしながら、従来の方法では上記のようにディスク入出力、データ変換および外部アプリケーションでの引当といった複数の処理を実行する必要があるため、その処理コストが問題となっていた。特に、近年では情報システムで扱うデータ量も従来に比べて大量となっており、当該処理コストが過大になっていた。
【０１９５】
これに対し、本実施の形態では、データ処理サーバ１００は、結合テーブル９００からディスクＩ／Ｏやデータ形式の変換等の処理を行うことなく引当後テーブル９４０を取得することができる。
【０１９６】
これにより、処理コストが軽減され、引当処理に要する時間を短縮することができる。また、上述したように引当処理に用いる引当値配列４００を複数の商品や出庫元（Ａ倉庫やＢ倉庫）で共通して利用できるので、演算の途中結果を保持するために必要なメモリ量を軽減することができる。その結果、引当処理を従来よりも効率的に実行することができる。
【０１９７】
図３４は、データ処理方法の第１の変形例を示す第１の図である。図３４では、当日のサービスの利用数の履歴を顧客毎に取得し、それを前日までの履歴に累積して、当日までの顧客毎のサービスの利用数を得るための計算方法を示している。
【０１９８】
当日データテーブル２００ｂには、顧客ＩＤ（IDentifier）に対応付けて複数のサービスを示す項目、そのサービスの当日の利用数を示す履歴通番の項目が設けられている。例えば、１レコード目は、顧客ＩＤ“００００１”で示される顧客が当日に“Ｂサービス”を“１”回利用したことを示す。同様に、２レコード目は、顧客ＩＤ“００００２”で示される顧客が当日に“Ａサービス”および“Ｂサービス”を組み合わせたサービスを“１”回利用したことを示す。更に、３レコード目は、顧客ＩＤ“００００１”で示される顧客が当日に“Ａサービス”を“１”回利用したことを示す。
【０１９９】
また、前日までの最終履歴通番テーブル３００ｂには、顧客ＩＤに対応付けて前日までの顧客のサービスの利用数を示す履歴通番の項目が設けられている。例えば、１レコード目は顧客ＩＤ“００００１”で示される顧客が前日までに何れかあるいは両方のサービスを計“５回”利用したことを示す。同様に２レコード目は、顧客ＩＤ“００００２”で示される顧客が前日までに何れかあるいは両方のサービスを計“３回”利用したことを示す。
【０２００】
データ処理サーバ１００は、前日までの最終履歴通番テーブル３００ｂを用いて当日データテーブル２００ｂを更新し、当日データテーブル２００ｂの履歴通番に、前日までの履歴通番を累積した結果を得ることができる。
【０２０１】
データ処理サーバ１００は、計算式として例えば“Ａｃｃｕｍ（ＲＡＮＧＥ（＠履歴通番），＠前日までの最終履歴通番．履歴通番）”を受け付ける。すると、当日データテーブル２００ｂの履歴通番の値に、前日までの最終履歴通番の値を累積する処理を行う。ここで、上記の例では、引当処理であったため、作業領域に設けた配列の値との差をとったが、本変形例では、和をとり、その結果で作業領域の配列を更新する点が異なっている。
【０２０２】
具体的には、前日までの最終履歴通番テーブル３００ｂに基づいて履歴通番配列４００ｂを生成する。履歴通番配列４００ｂが作業領域の配列であり、引当値配列４００に対応する。そして、当日データテーブル２００ｂの各レコードの履歴通番の更新が必要であることを検知するたびに履歴通番配列４００ｂを更新する。
【０２０３】
例えば、当日データテーブル２００ｂの１番目のレコードの履歴通番“１”には“５”を加算する必要があるので、履歴通番配列４００ｂの要素番号“０”の位置を“１＋５＝６”で更新する。そして、変換テーブル５００ｂの第１レコードを示すＯＳ値“１”に対応するＶＬに“６”を設定する。続いて、当日データテーブル２００ｂの２番目のレコードの履歴通番“１”には“３”を加算する必要があるので、履歴通番配列４００ｂの要素番号“１”の位置を“１＋３＝４”で更新する。そして、変換テーブル５００ｂの第２レコードを示すＯＳ値“２”に対応するＶＬに“４”を設定する。続いて、当日データテーブル２００ｂの３番目のレコードの履歴通番“１”には、“６”を加算する必要があるので、履歴通番配列４００ｂの要素番号“０”の位置を“１＋６＝７”で更新する。そして、変換テーブル５００ｂの第３レコードを示すＯＳ値“３”に対応するＶＬに“７”を設定する。
【０２０４】
データ処理サーバ１００は、生成した変換テーブル５００ｂによって、当日データテーブル２００ｂの履歴通番の値を更新することができる。
図３５は、データ処理方法の第１の変形例を示す第２の図である。データ処理サーバ１００は、上記変換テーブル５００ｂにより当日データテーブル２００ｂを更新して、当日データテーブル２００ｃを生成する。具体的には、変換テーブル５００ｂの各ＯＳ値に対応するレコードに含まれる履歴通番の値を、変換テーブル５００ｂの当該レコードを示すＯＳ値に対応するＶＬに変更する。
【０２０５】
また、データ処理サーバ１００は、履歴通番配列４００ｂの各要素を顧客ＩＤに対応付けることで、当日までの最終履歴通番テーブル３００ｃを得ることができる。
このように、データ処理サーバ１００は、コマンド５０の計算式５５に所定の累積処理用関数が設定されることで、マスタテーブルの所定の項目値にスレイブテーブルの当該項目値の累積和をとる演算を行うことができる。
【０２０６】
なお、上記の処理は、当日データテーブル２００ｂおよび前日までの最終履歴通番テーブル３００ｂを複数の情報ブロックに分解した状態で実行できるので、前述の引当処理と同様、各処理を効率的に実行することができる。
【０２０７】
図３６は、データ処理方法の第２の変形例を示す第１の図である。図３６では、当日の顧客の（あるサービスに対する）契約状態と、その契約状態の変更状況を得るための計算方法を示している。ここで、具体的に取り得る契約状態は“新規”状態、“更新”状態とする。そして、当該状態が何れか一方の状態から他方の状態となった場合に変更があったものとする。
【０２０８】
当日データテーブル２００ｄには、顧客ＩＤに対応付けて契約状態の項目および変更フラグの項目が設けられている。変更フラグの項目には、直前のレコードで示される契約状態から変更があった場合に、それを示すフラグが設定される。例えば、１レコード目には顧客ＩＤ“００００１”で示される顧客が契約状態“新規”で登録されたことを示す設定がなされている。また、２レコード目には顧客ＩＤ“００００１”で示される顧客が契約状態“新規”で登録されたことを示す設定がなされている。更に、３レコード目には顧客ＩＤ“００００１”で示される顧客が契約状態“更新”で登録されたことを示す設定がなされている。なお、初期状態では、変更フラグは“−”（設定なし）である。
【０２０９】
また、前日の状態テーブル３００ｄには、顧客ＩＤに対応付けて前日の顧客の契約状態を示す項目が設けられている。例えば、顧客ＩＤ“００００１”で示される顧客が前日に契約状態“新規”で登録されたことを示す設定がなされている。
【０２１０】
データ処理サーバ１００は、前日の状態テーブル３００ｄを用いて当日データテーブル２００ｄの変更フラグを更新することができる。
データ処理サーバ１００は、計算式として例えば“Ｓｅｔ（ＲＡＮＧＥ（＠契約状態），ＬＡＧ（＜＞（＠契約状態，＠前日の状態．契約状態），１，０））”を受け付ける。すると、当日データテーブル２００ｄの直前のレコードとの契約状態の比較を行い、変更フラグへの設定を行う。
【０２１１】
具体的には、前日の状態テーブル３００ｄに基づいて、契約状態配列４００ｄを生成する。契約状態配列４００ｄは前述の作業領域の配列である。前日の状態テーブル３００ｄには、前日の状態として“新規”が設定されているので契約状態配列４００ｄにも“新規”が設定される。
【０２１２】
そして、当日データテーブル２００ｄの各レコードの契約状態の設定内容で契約状態配列４００ｄを更新する。
例えば、当日データテーブル２００ｄの１番目のレコードの契約状態は“新規”であるので、当該値を契約状態配列４００ｄに設定する。また、設定前の契約状態“新規”と設定後の契約状態“新規”とは等しい。よって、上記計算式に基づき、変換テーブル５００ｄの第１レコードを示すＯＳ値“１”に対応するＶＬに“０”を設定する。続いて、当日データテーブル２００ｄの２番目のレコードの契約状態は“新規”であるので、当該値を契約状態配列４００ｄに設定する。また、設定前の契約状態“新規”と設定後の契約状態“新規”とは等しい。よって、変換テーブル５００ｄの第２レコードを示すＯＳ値“２”に対応するＶＬに“０”を設定する。更に、当日データテーブル２００ｄの３番目のレコードの契約状態は“更新”であるので、当該値を契約状態配列４００ｄに設定する。また、設定前の契約状態“新規”と設定後の契約状態“更新”とは異なる。よって、上記計算式に基づき、変換テーブル５００ｄの第３レコードを示すＯＳ値“３”に対応するＶＬに“１”を設定する。
【０２１３】
データ処理サーバ１００は、生成した変換テーブル５００ｄによって、当日データテーブル２００ｄの変更フラグの値を設定することができる。
図３７は、データ処理方法の第２の変形例を示す第２の図である。データ処理サーバ１００は、上記変換テーブル５００ｄにより当日データテーブル２００ｄを更新して、当日データテーブル２００ｅを生成する。具体的には、変換テーブル５００ｄの各ＯＳ値に対応するレコードに含まれる変更フラグの値を、変換テーブル５００ｄの当該レコードを示すＯＳ値に対応するＶＬに変更する。
【０２１４】
また、データ処理サーバ１００は、契約状態配列４００ｄの要素を顧客ＩＤに対応付けることで、当日の状態テーブル３００ｅを得ることができる。
このように、データ処理サーバ１００は、コマンド５０の計算式５５に所定の比較処理用関数が設定されることで、マスタテーブルの所定の項目値に直前のレコードとの比較結果を入力する演算を行うことができる。
【０２１５】
なお、上記の処理は、当日データテーブル２００ｄおよび前日までの状態テーブル３００ｄを複数の情報ブロックに分解した状態で実行できるので、前述の引当処理等と同様、各処理を効率的に実行することができる。
【０２１６】
更に、作業領域の固定位置を参照して演算を行うような処理方法は上述した例に限られない。具体的には、処理対象の複数の項目値に対して、ある係数による演算を一括して行う場合に利用することができる。これは、作業領域の値を演算に伴って変更しないよう制御することで実現できる。このような演算機能は、例えば複数の通貨値を為替レートにより他国の通貨値へ一括変換する処理に利用可能である。また、例えば、複数の商品価格に対して割引率を一括反映する処理に利用可能である。
【０２１７】
以上、本発明のデータ処理プログラム、データ処理装置およびデータ処理方法を図示の実施の形態に基づいて説明したが、これらに限定されるものではなく、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。更に、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０２１８】
１  データ処理装置
１ａ  記憶手段
１ｂ  データ取得手段
１ｃ  累計配列生成手段
１ｄ  演算手段
１ｅ  更新手段
２，３  順序集合
２ａ，２ｃ，３ａ，３ｃ  ポインタ配列
２ｂ，２ｄ，３ｂ，３ｄ  値リスト
４  第１の累計配列
５  第２の累計配列
６  第１の作業用記憶領域
７  第２の作業用記憶領域
【図１】
2011203899.tif 000003
【図２】
2011203899.tif 000004
【図３】
2011203899.tif 000005
【図４】
2011203899.tif 000006
【図５】
2011203899.tif 000007
【図６】
2011203899.tif 000008
【図７】
2011203899.tif 000009
【図８】
2011203899.tif 000010
【図９】
2011203899.tif 000011
【図１０】
2011203899.tif 000012
【図１１】
2011203899.tif 000013
【図１２】
2011203899.tif 000014
【図１３】
2011203899.tif 000015
【図１４】
2011203899.tif 000016
【図１５】
2011203899.tif 000017
【図１６】
2011203899.tif 000018
【図１７】
2011203899.tif 000019
【図１８】
2011203899.tif 000020
【図１９】
2011203899.tif 000021
【図２０】
2011203899.tif 000022
【図２１】
2011203899.tif 000023
【図２２】
2011203899.tif 000024
【図２３】
2011203899.tif 000025
【図２４】
2011203899.tif 000026
【図２５】
2011203899.tif 000027
【図２６】
2011203899.tif 000028
【図２７】
2011203899.tif 000029
【図２８】
2011203899.tif 000030
【図２９】
2011203899.tif 000031
【図３０】
2011203899.tif 000032
【図３１】
2011203899.tif 000033
【図３２】
2011203899.tif 000034
【図３３】
2011203899.tif 000035
【図３４】
2011203899.tif 000036
【図３５】
2011203899.tif 000037
【図３６】
2011203899.tif 000038
【図３７】
2011203899.tif 000039