(57)【要約】【課題】汎用機上のアプリケーションのロジックを残しつつ、階層型データベースにアクセスするアプリケーションをリレーショナルデータベースにアクセスするアプリケーションに変換する。【解決手段】本発明に係るクエリ変換プログラムは、階層型データベースの構造定義データと、ＣＯＢＯＬプログラムが階層型データベースにアクセスするときのアクセスパラメータに基づき、階層型データベースを変換したリレーショナルデータベースにアクセスするためのクエリを特定する。また、あらかじめ用意されている、前記リレーショナルデータベースにアクセスするＳＱＬ部品のうち、前記クエリに相当するものを選択し、前記アクセスパラメータを引き渡してクエリを実行する。【選択図】図１
2011197988.tif 000002
【特許請求の範囲】
【請求項１】
汎用機が備える階層型データベースに対してＣＯＢＯＬプログラムからアクセスする処理を、前記階層型データベースをＲＤＢ形式に変換することによって生成したリレーショナルデータベースに対して前記ＣＯＢＯＬプログラムからアクセスする処理に変換するための処理を、コンピュータに実行させるプログラムであって、
前記コンピュータに、
前記階層型データベースの構造を定義する構造定義データを読み込む構造取得ステップと、
ＣＯＢＯＬプログラムから前記階層型データベースに対してアクセスする階層型ＤＢアクセス処理のアクセスパラメータを受け取るステップと、
前記構造定義データと前記アクセスパラメータに基づき前記階層型ＤＢアクセス処理に対応する前記リレーショナルデータベース宛のクエリを特定する構造解析ステップと、
前記リレーショナルデータベースに対して発行するクエリのうちクエリに引き渡すパラメータを除いた部分を記述した１以上のＳＱＬ部品のなかから前記階層型ＤＢアクセス処理に対応するクエリを記述したＳＱＬ部品を選択するＳＱＬ選択ステップと、
前記ＳＱＬ選択ステップで選択したＳＱＬ部品に前記アクセスパラメータを引き渡して前記リレーショナルデータベース宛のクエリを実行するステップと、
を実行させることを特徴とするクエリ変換プログラム。
【請求項２】
前記構造取得ステップでは、前記コンピュータに、
前記構造定義データを前記コンピュータのメモリ上に展開させ、
前記構造解析ステップでは、前記コンピュータに、
前記メモリ上に展開されている前記構造定義データを用いて前記階層型ＤＢアクセス処理に対応する前記リレーショナルデータベース宛のクエリを特定させる
ことを特徴とする請求項１記載のクエリ変換プログラム。
【請求項３】
前記ＣＯＢＯＬプログラムから当該クエリ変換プログラムを呼び出すインタフェースを備え、
前記コンピュータに、
前記ＣＯＢＯＬプログラムから当該クエリ変換プログラムに対する呼び出しを受け取って当該クエリ変換プログラムを起動するステップを実行させる
ことを特徴とする請求項１または２記載のクエリ変換プログラム。
【請求項４】
前記汎用機が備える階層型データベースを、請求項１から３のいずれか１項に記載のクエリ変換プログラムを実行するコンピュータがアクセスする前記リレーショナルデータベースに変換する、データベース定義文を生成する処理を、第２コンピュータに実行させるプログラムであって、
前記第２コンピュータに、
前記構造定義データを読み込むステップと、
前記構造定義データが定義する前記階層型データベースの階層構造を反映したデータベース定義文を生成するＤＤＬ生成ステップと、
を実行させ、
前記ＤＤＬ生成ステップでは、前記第２コンピュータに、
前記階層型データベースの上位セグメントが有するフィールドを列として備える上位テーブルを作成するＳＱＬ文と、前記上位セグメントの下位セグメントが有するフィールドを列として備える下位テーブルを作成するＳＱＬ文を生成させ、
前記下位テーブルを作成するＳＱＬ文内に、前記下位セグメントが有するフィールドに対応する列に加えて、前記上位セグメントが有するキーフィールドに対応する列を指定する新たな列を記述させる
ことを特徴とするデータベース変換プログラム。
【請求項５】
請求項４記載のデータベース変換プログラムが生成したＳＱＬ文によって生成されたデータベースに対してアクセスするＳＱＬ文を生成する処理を前記第２コンピュータに実行させるプログラムであって、
前記第２コンピュータに、
前記構造定義データを読み込むステップと、
前記構造定義データが記述している定義に基づき前記ＳＱＬ部品を生成するＳＱＬ文生成ステップと、
を実行させ、
前記ＳＱＬ文生成ステップでは、前記第２コンピュータに、
前記階層型データベースのセグメントに対応する前記リレーショナルデータベース内のテーブルを指定して、セグメントが有するキーに対応する列に対して検索条件を与え、条件を満たす最初のレコードにアクセスするＳＱＬ文と、
前記階層型データベースのセグメントに対応する前記リレーショナルデータベース内のテーブルを指定して当該テーブル内で前回与えられた検索条件を満たす次レコードにアクセスするＳＱＬ文と、
前記階層型データベース内セグメントへの新たなレコードの追加に相当する、前記リレーショナルデータベース内の対応するテーブルに新たなレコードを追加するＳＱＬ文と、
前記階層型データベース内のセグメントレコードの更新に相当する前記リレーショナルデータベース内の対応するテーブルレコードを更新するＳＱＬ文と、
前記階層型データベース内のセグメントレコードの削除に相当する前記リレーショナルデータベース内のテーブルレコードを削除するＳＱＬ文と、
を生成させることを特徴とするＳＱＬ文生成プログラム。
【請求項６】
前記汎用機が備える階層型データベースに対してアクセスするＣＯＢＯＬプログラムを、前記階層型データベースをＲＤＢ形式に変換することによって生成したリレーショナルデータベースに対してアクセスするＣＯＢＯＬプログラムに変換する処理を、第３コンピュータに実行させるプログラムであって、
前記第３コンピュータに、
前記ＣＯＢＯＬプログラムのうち前記階層型データベースに対してアクセスするインタフェースを呼び出す処理を、
請求項１から３のいずれか１項に記載のクエリ変換プログラムを呼び出す処理に書き換えさせる
ことを特徴とするＣＯＢＯＬソースコード変換プログラム。
【請求項７】
請求項１から３のいずれか１項に記載のクエリ変換プログラムと、
請求項４記載のデータベース変換プログラムと、
請求項５記載のＳＱＬ文生成プログラムと、
請求項６記載のＣＯＢＯＬソースコード変換プログラムと、
各前記プログラムを実行するコンピュータと、
を有することを特徴とするデータベース変換システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用機が備える階層型データベースに対してＣＯＢＯＬプログラムからアクセスする処理を、同じＣＯＢＯＬプログラムからリレーショナルデータベースに対してアクセスする処理に変換する技術に関するものである。
【背景技術】
【０００２】
従来、企業の基幹業務システムなどの大規模情報システムでは、汎用機（メインフレーム、ホストなどとも呼ぶ）が用いられてきた。しかし、ダウンサイジングなどの要求が高まるにつれ、汎用機で稼動しているアプリケーションを、ＵＮＩＸサーバなどのオープンシステムに移行することが求められている。
【０００３】
汎用機が用いるデータベースの中には、階層型構造を有しているものがあり、オープンシステムで用いられるリレーショナルデータベース（ＲＤＢ）とは、データ形式、データ構造、データ同士の関係などが異なる。そのため、汎用機が用いる階層型データベースにアクセスするアプリケーションをオープンシステムに移行するには、アプリケーションを再構築するのが一般的である。
【０００４】
汎用機アプリケーションをオープンシステムに移行する技術として、汎用機上で稼動するＣＯＢＯＬアプリケーションをＪａｖａなどのオープンシステムで用いられるプログラムに変換する技術がある。
【０００５】
その他、下記特許文献１には、メインフレームのアプリケーションをオープン環境に移行する技術として、画面構成に着目したものが記載されている。同文献では、汎用画面フォームと汎用画面データを用いて、複数のメインフレームに対応可能な画面フォームを構成することが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−３５５４１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
階層型データベースにアクセスするアプリケーションをオープンシステムに移行するためには、上述の通りアプリケーションを再構築したり、プログラムを変換したりする必要がある。
【０００８】
しかし、アプリケーションを再構築するのは多大なコストと時間がかかる。またプログラムを変換するにしても、データベース構造の違いに起因して、データベースにアクセスする部分のプログラム上のロジックを書き換える必要が生じ、必ずしも全て自動変換できるとは限らない。プログラマがプログラムを書き換える場合、アプリケーションを再構築するのと同様のコストと時間を要する。
【０００９】
本発明は、上記のような課題を解決するためになされたものであり、汎用機上のアプリケーションのロジックを残しつつ、階層型データベースにアクセスするアプリケーションをリレーショナルデータベースにアクセスするアプリケーションに変換する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るクエリ変換プログラムは、階層型データベースの構造定義データと、ＣＯＢＯＬプログラムが階層型データベースにアクセスするときのアクセスパラメータに基づき、階層型データベースを変換したリレーショナルデータベースにアクセスするためのクエリを特定する。また、あらかじめ用意されている、前記リレーショナルデータベースにアクセスするＳＱＬ部品のうち、前記クエリに相当するものを選択し、前記アクセスパラメータを引き渡してクエリを実行する。
【発明の効果】
【００１１】
本発明に係るクエリ変換プログラムによれば、ＣＯＢＯＬプログラムから階層型データベースにアクセスする処理を、リレーショナルデータベースにアクセスする処理に変換することができる。すなわち、ＣＯＢＯＬプログラムが階層型データベースにアクセスする際に実行するロジックはそのまま残しておき、アクセスが行われる時点でそのアクセスをリレーショナルデータベースに対するアクセスに変換する。これにより、ＣＯＢＯＬプログラムをほぼ変更することなく、データベースにアクセスする処理のみを、リレーショナルデータベース環境に移行することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るクエリ変換プログラム１００および周辺環境を示す図である。
【図２】階層型データベース２１０のデータ構造を示す図である。
【図３】リレーショナルデータベース４００のデータ構造を示す図である。
【図４】ＳＱＬ部品４１０が保持するＳＱＬ文の例を示す図である。
【図５】ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００にアクセスする処理の流れを説明する図である。
【図６】実施の形態２に係るクエリ変換プログラム１００および周辺環境を示す図である。
【図７】ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００にアクセスする処理の流れを説明する図である。
【図８】実施の形態３に係るクエリ変換プログラム１００および周辺環境を示す図である。
【発明を実施するための形態】
【００１３】
＜実施の形態１＞
図１は、本発明の実施の形態１に係るクエリ変換プログラム１００および周辺環境を示す図である。クエリ変換プログラム１００は、汎用機２００が備えるＣＯＢＯＬプログラム２２０から階層型データベース２１０にアクセスする処理を、同じＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００にアクセスする処理に変換するプログラムである。以下、図１の各構成について説明する。
【００１４】
なお、以下の説明では記載の便宜上、各プログラムを動作主体として説明することがあるが、実際に各プログラムを実行するのは当該プログラムを備えるコンピュータであることを付言しておく。
【００１５】
図１（ａ）は、汎用機２００環境からオープン環境へ移行する前のコンピュータ環境を示す図である。図１（ａ）において汎用機２００は、ＣＯＢＯＬプログラム２２０を実行するコンピュータである。ＣＯＢＯＬプログラム２２０は、階層型ＤＢインタフェース２３０にアクセスパラメータを引き渡して呼び出し、階層型ＤＢインタフェース２３０を介して階層型データベース２１０にアクセスする。
【００１６】
階層型データベース２１０は、後述の図２で説明する階層型構造を有するデータベースである。階層型データベース２１０のデータ構造は、構造定義データ２１１に記述されている。この階層型のデータ構造は、オープン環境でよく用いられるリレーショナルデータベース（ＲＤＢ）のデータ構造とは異なる。したがって、階層型データベース２１０にアクセスするプログラムをオープン環境に移行するためには、何らかの変換処理、中継処理など、各データベースの構造の差異を吸収する処理が必要になる。
【００１７】
汎用機２００上に構成されたプログラムをオープン環境に移行する場合、移行対象として、汎用機２００本体、ＣＯＢＯＬプログラム２２０、階層型データベース２１０が挙げられる。なかでもＣＯＢＯＬプログラム２２０をオープン環境向けに再構築する作業は、開発量が膨大になりがちである。そこで本発明では、ＣＯＢＯＬプログラム２２０を再構築せず極力そのまま用いて、オープン環境に移行することを図る。
【００１８】
図１（ｂ）は、図１（ａ）のコンピュータ環境をオープン環境に移行した後の構成を示す図である。汎用機２００上で稼動していたＣＯＢＯＬプログラム２２０は、コンピュータ３００上で稼動する。階層型データベース２１０は、リレーショナルデータベース４００に変換されている。
【００１９】
ＣＯＢＯＬプログラム２２０は、階層型ＤＢインタフェース２３０ではなくクエリ変換プログラム１００を呼び出すように書き換えられている点を除いて、図１（ａ）におけるＣＯＢＯＬプログラム２２０と同一のプログラムである。すなわちクエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０から階層型データベース２１０にアクセスする処理を、同じＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００にアクセスする処理に変換する処理を実行する。
【００２０】
データベース変換プログラム１１０は、階層型データベース２１０をリレーショナルデータベース４００に変換するプログラムである。データベース変換プログラム１１０は、階層型データベース２１０の階層構造を反映したＤＤＬ（Ｄａｔａｂａｓｅ  Ｄｉｆｉｎｉｔｉｏｎ  Ｌａｎｇｕａｇｅ）文を生成し、これを実行してリレーショナルデータベース４００を作成する。詳細は後述の図２で説明する。
【００２１】
ＳＱＬ文生成プログラム１２０は、リレーショナルデータベース４００にアクセスするクエリを生成するためのＳＱＬ部品４１０を生成する。リレーショナルデータベース４００へアクセスするためには、コンピュータ３００からＳＱＬ文を発行する必要があるので、これに備えたものである。
【００２２】
ＳＱＬ部品４１０が記述しているＳＱＬ文は、リレーショナルデータベース４００に対して発行する典型的なＳＱＬ文のパターンを網羅したものである。ＳＱＬ文に引き渡すパラメータを調整することによって、ＣＯＢＯＬプログラム２２０から階層型データベース２１０に対して発行する任意のクエリを、ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００に対して発行するクエリとして表現できるようになっている。ＣＯＢＯＬプログラム２２０から階層型データベース２１０に対して発行するクエリの種類については後述する。
【００２３】
ＣＯＢＯＬプログラム２２０から階層型データベース２１０に対してアクセスする処理は、階層型データベース２１０のデータ構造にある程度依拠している。しかし、本発明においてこのデータ構造に依拠する部分は、ＳＱＬ部品４１０としてクエリ変換プログラム１００とは独立に構成されている。したがってクエリ変換プログラム１００は、単に受け取ったパラメータをＳＱＬ部品４１０に引き渡して呼び出せばよく、階層型データベース２１０のデータ構造を意識する必要はない。これにより、クエリ変換プログラム１００本体は、階層型データベース２１０のデータ構造に依拠することなく、汎用的に構成することができる。
【００２４】
データベース変換プログラム１１０とＳＱＬ文生成プログラム１２０は、汎用機２００またはコンピュータ３００が実行するようにしてもよいし、図示しない他のコンピュータが実行するようにしてもよい。
【００２５】
以上、汎用機２００上のアプリケーション環境をオープン環境に移行するための基本的な構成について説明した。以下、個々の構成要素について詳述する。
【００２６】
図２は、階層型データベース２１０のデータ構造を示す図である。階層型データベース２１０は、セグメントと呼ばれるデータ領域が親子関係を有する階層構造を備える。各セグメント内のレコードには、データ値とそのデータ値にアクセスするためのキー値がセットになって格納されている。このデータ値とキー値の各構成要素を、フィールドとも呼ぶ。
【００２７】
ＣＯＢＯＬプログラム２２０は、階層型データベース２１０にアクセスする際には、キー値を指定することにより、いずれのレコードに対してアクセスするかを指定することができる。また、セグメントの親子関係をたどって、他のセグメント内のレコードにアクセスすることもできる。
【００２８】
図３は、リレーショナルデータベース４００のデータ構造を示す図である。データベース変換プログラム１１０は、構造定義データ２１１が記述している階層型データベース２１０の階層構造を反映したＤＤＬ文を生成し、リレーショナルデータベース４００を作成する。このＤＤＬ文は、各セグメントをテーブルとして作成するとともに、各テーブル内に、階層型データベース２１０のキーフィールドとデータフィールドに対応する個別の列として格納する。
【００２９】
さらに下位セグメントに対応するテーブルについては、キーフィールドとデータフィールドに対応する列に加え、上位セグメントのキー値を格納する親キー列を生成する。親キー列の値を参照することにより、各テーブル間の階層構造を把握することができる。この列構成により、階層型データベース２１０の階層構造が、リレーショナルデータベース４００のデータ構造に反映される。
【００３０】
図４は、ＳＱＬ部品４１０が保持するＳＱＬ文の例を示す図である。ＳＱＬ部品４１０は、階層型データベース２１０のセグメント毎、すなわちリレーショナルデータベース４００のテーブル毎に、リレーショナルデータベース４００へアクセスするためのＳＱＬ文を保持する。
【００３１】
ＣＯＢＯＬプログラム２２０から階層型データベース２１０にアクセスする処理は、大別すると、キー値を指定してデータ値を（ａ）取得する、（ｂ）更新する、（ｃ）追加する、（ｄ）削除する、の４種類に分けられる。これはリレーショナルデータベース４００に対して、（ａ）ＳＥＬＥＣＴ文、（ｂ）ＵＰＤＡＴＥ文、（ｃ）ＩＮＳＥＲＴ文、（ｄ）ＤＥＬＥＴＥ文、を発行するＳＱＬ文として記述することができる。以下では主にテーブル内のカラムを対象とするＳＱＬ文を例に取り上げるが、ＳＱＬ文の対象はデータベースやテーブルでもよい。
【００３２】
ＳＱＬ文生成プログラム１２０は、構造定義データ２１１の記述に基づき、リレーショナルデータベース４００に対して上記（ａ）〜（ｄ）のクエリを発行するためのＳＱＬ文を生成する。ただし、ＣＯＢＯＬプログラム２２０から動的に引き渡されるパラメータについては、ＳＱＬ文中には記述せず、ＳＱＬクエリを発行するときにクエリ変換プログラム１００から引き渡すものとする。
【００３３】
テーブル名および列名については、例えば階層型データベース２１０の各セグメント名などのデータ構造に準じた適当な命名規則などにしたがって付与する。これにより、ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００のいずれのテーブルにアクセスすればよいかを一意に定めることができる。
【００３４】
階層型データベース２１０固有の各セグメントのデータ構造は、ＳＱＬ部品４１０が保持する各ＳＱＬ文に記述されているので、クエリ変換プログラム１００内には階層型データベース２１０各セグメント固有の構造を記述する必要はない。したがって、クエリ変換プログラム１００と階層型データベース２１０の間の依存関係をなくすことができる。
【００３５】
以上、汎用機２００上のアプリケーション環境をオープン環境に移行するための構成について説明した。次に、クエリ変換プログラム１００の動作について説明する。
【００３６】
図５は、ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００にアクセスする処理の流れを説明する図である。以下、図５の各ステップについて説明する。
【００３７】
（１）クエリ変換プログラムを呼び出す
ＣＯＢＯＬプログラム２２０は、階層型ＤＢインタフェース２３０に代えて、クエリ変換プログラム１００を呼び出し、リレーショナルデータベース４００に対するクエリを実行するよう依頼する。クエリ変換プログラム１００に引き渡すパラメータは、階層型ＤＢインタフェース２３０に引き渡すパラメータと同じである。
【００３８】
（２）データベースの構造定義を把握する
クエリ変換プログラム１００は、構造定義データ２１１を読み込み、階層型データベース２１０の構造定義を把握する。ここでいう構造定義とは、各セグメントの親子関係、各セグメントのサイズ、セグメントが有するキーの開始位置、長さ、などのことをいう。
【００３９】
（３）クエリを解析する
クエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０から受け取ったクエリの内容を解析する。ここでいうクエリの解析とは、構造定義データ２１１の記述を必要に応じて用いながら、以下のような処理を行うことをいう。
【００４０】
（３．１）検索条件
クエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０から受け取ったパラメータに含まれる、階層型データベース２１０に対する検索条件を把握する。階層型データベース２１０に対する検索条件は、例えば１以上のキー値を指定して対応するデータ値を取得するように記述されている。クエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０から受け取ったパラメータからこの検索条件を取り出す。
【００４１】
（３．２）経路分析、階層制御
階層型データベース２１０は、キー値をたどりながら、セグメントの親子関係をまたいでアクセスすることができるように構成されている。例えば、ＣＯＢＯＬプログラム２２０が図２に示した上位セグメント内のフィールドを全て読み終えると、読み取りカーソルが下位セグメントに自動的に移動して下位セグメントのフィールドを読み取り始めるように、クエリを構成することができる。クエリ変換プログラム１００は、構造定義データ２１１の記述にしたがって、このようなセグメントの親子関係をまたがるクエリが発生するか否かを把握する。これにより、セグメントをまたがるクエリが発生する場合、ＳＱＬ部品４１０を呼び出す前にその旨を認識し、対象となるテーブルの親子関係などをあらかじめ把握しておくことができる。
【００４２】
（４）ＳＱＬを実行する
クエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０から受け取ったクエリに対応して、アクセスすべきセグメントを特定し、それに対応するテーブルにアクセスするためのＳＱＬ部品４１０を呼び出す。ＳＱＬ部品４１０はクエリ変換プログラム１００からの要求に合致するＳＱＬ文を実行してリレーショナルデータベース４００にアクセスする。ＣＯＢＯＬプログラム２２０から受け取ったクエリがセグメントをまたがる場合は、ステップ（３）の分析結果に基づき、対象となるテーブルに対するクエリを発行することのできるＳＱＬ部品４１０を適宜選択して呼び出す。
【００４３】
以上、クエリ変換プログラム１００がリレーショナルデータベース４００にアクセスする動作について説明した。
【００４４】
以上のように、本実施の形態１に係るクエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０から階層型データベース２１０に対するクエリを、ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００に対するクエリに変換する。これによりＣＯＢＯＬプログラム２２０自体は、階層型ＤＢインタフェース２３０を呼び出す部分を、クエリ変換プログラム１００を呼び出すように書き換えるのみで、オープン環境に移行することができるので、プログラムを再構築する必要がなくなり、移行に係るコストや期間を大幅に削減することができる。
【００４５】
また、本実施の形態１に係るクエリ変換プログラム１００は、構造定義データ２１１が定義する階層型データベース２１０のデータ構造にしたがって、ＳＱＬ文生成プログラム１２０が生成したＳＱＬ部品４１０のうち適切なものを選択して実行する。これにより、階層型データベース２１０のデータ構造に依拠する部分をクエリ変換プログラム１００から切り離してＳＱＬ文内に埋め込むことができるので、クエリ変換プログラム１００自体は任意の階層型データベース２１０に対して汎用的に用いることができる。したがって、個々の階層型データベース２１０毎にクエリ変換プログラム１００を開発する必要がなくなり、開発コストや期間をさらに削減することができる。
【００４６】
また、本実施の形態１に係るデータベース変換プログラム１１０は、構造定義データ２１１の記述にしたがって、階層型データベース２１０が備える各セグメントに対応するテーブルを作成するためのＤＤＬ文を生成する。各テーブルには、当該セグメントが有するフィールドに対応する列に加え、セグメントの親子関係をたどるための親キー列を追加する。これにより、階層型データベース２１０のデータ構造を崩すことなく、リレーショナルデータベース４００に移行することができる。
【００４７】
また、本実施の形態１によれば、クエリ変換プログラム１００がＣＯＢＯＬプログラム２２０から受け取ったクエリを解析する際に、データベース変換プログラム１１０が参照した構造定義データ２１１をそのまま用いて、リレーショナルデータベース４００の構造を把握することができる。すなわち、クエリ変換プログラム１００とデータベース変換プログラム１１０は、構造定義データ２１１を介してデータベース構造についての知識を共有することができる。これにより、ＣＯＢＯＬプログラム２２０が階層型データベース２１０にアクセスする処理を、リレーショナルデータベース４００にアクセスする処理に、矛盾なく変換することができる。
【００４８】
＜実施の形態２＞
実施の形態１では、クエリ変換プログラム１００は、構造定義データ２１１が記述している階層型データベース２１０の定義にしたがって、ＣＯＢＯＬプログラム２２０から受け取ったクエリを解析することを説明した。本発明の実施の形態２では、構造定義データ２１１の記述内容をあらかじめメモリ上に展開しておき、クエリを実行する毎に構造定義データ２１１を読み込まなくてもよいようにすることを図る。
【００４９】
図６は、本実施の形態２に係るクエリ変換プログラム１００および周辺環境を示す図である。本実施形態２では、実施の形態１の図１で説明した構成に加え、新たに構造定義データ展開プログラム１０１と、これを生成するための展開プログラム生成プログラム１３０を設けた。また、ＣＯＢＯＬプログラム２２０は、クエリ変換プログラム１００に加えて、プログラムの開始時点で構造定義データ展開プログラム１０１を呼び出すように書き換えられている。その他の構成は実施の形態１と同様である。なお記載簡易のため、汎用機２００など一部の構成は記載を省略した。
【００５０】
構造定義データ展開プログラム１０１は、構造定義データ２１１が記述している階層型データベース２１０のデータ構造定義を、コンピュータ３００のメモリ上に展開するためのプログラムである。すなわち構造定義データ展開プログラム１０１は、図５で説明したステップ（２）と同様の処理を、コンピュータ３００のメモリ上で実行するプログラムであるともいえる。
【００５１】
展開プログラム生成プログラム１３０は、構造定義データ２１１の記述にしたがって、構造定義データ展開プログラム１０１を生成する。構造定義データ展開プログラム１０１には、構造定義データ２１１の記述内容がプログラムとして記述される。換言すると、構造定義データ展開プログラム１０１は、構造定義データ２１１の記述内容をプログラム内変数としてハードコードしたプログラムであるともいえる。
【００５２】
以上、本実施形態２における、汎用機２００上のアプリケーション環境をオープン環境に移行するための構成について説明した。次に、各プログラムの動作について、実施形態１と異なる点を中心に説明する。
【００５３】
図７は、ＣＯＢＯＬプログラム２２０からリレーショナルデータベース４００にアクセスする処理の流れを説明する図である。以下、図７の各ステップについて説明する。
【００５４】
（１）展開プログラムを呼び出す
ＣＯＢＯＬプログラム２２０は、プログラム開始時点で一度だけ構造定義データ展開プログラム１０１を呼び出す。
【００５５】
（２）構造定義データをメモリに展開する
構造定義データ展開プログラム１０１は、コンピュータ３００のメモリ上に、構造定義データ展開領域３１０を確保する。構造定義データ展開プログラム１０１は、構造定義データ展開領域３１０に、構造定義データ２１１の内容を書き込む。構造定義データ展開プログラム１０１が生成された時点で、構造定義データ展開プログラム１０１には構造定義データ２１１の記述内容がハードコードされているので、改めて構造定義データ２１１を読み込む必要はない。
【００５６】
（３）クエリ変換プログラムを呼び出す
本ステップは、図５のステップ（３）と同様である。
【００５７】
（４）クエリを解析する
本ステップは、図５のステップ（４）と同様であるが、クエリ変換プログラム１００は構造定義データ２１１ではなく、構造定義データ展開領域３１０内に書き込まれているメモリ上のデータを読み取る。これにより、ファイルとして作成されている構造定義データ２１１を読み込むよりも、処理速度を速めることができる。
【００５８】
（５）ＳＱＬを実行する
本ステップは、図５のステップ（５）と同様である。
【００５９】
以上、クエリ変換プログラム１００がリレーショナルデータベース４００にアクセスする動作について説明した。
【００６０】
以上の説明では、展開プログラム生成プログラム１３０が構造定義データ展開プログラム１０１を生成し、クエリ変換プログラム１００と構造定義データ展開プログラム１０１を別プログラムとして構成する例を説明したが、両者を一体的に構成することもできる。例えば、以下のような代替構成例が考えられる。
【００６１】
（構造定義データ展開プログラム１０１の代替構成例その１）
任意の構造定義データ２１１を読み込んでその記述内容を構造定義データ展開領域３１０に書き込む処理を、クエリ変換プログラム１００内に記述しておく。クエリ変換プログラム１００は、ＣＯＢＯＬプログラム２２０からクエリを受け取ったとき、構造定義データ展開領域３１０に構造定義データ２１１の記述内容が書き込まれているか否かをチェックする。書き込まれていなければ構造定義データ２１１を読み取って展開し、既に書き込まれていれば同処理を省略する。
【００６２】
（構造定義データ展開プログラム１０１の代替構成例その２）
展開プログラム生成プログラム１３０は、構造定義データ展開プログラム１０１を、クエリ変換プログラム１００の外部モジュール、例えば動的リンクライブラリなどの形式で生成する。クエリ変換プログラム１００は、必要に応じて構造定義データ展開プログラム１０１を呼び出す。
【００６３】
以上のように、本実施の形態２に係るクエリ変換プログラム１００は、コンピュータ３００のメモリ上に展開されている構造定義データ展開領域３１０から、階層型データベース２１０のデータ構造を取得し、これに基づいて、ＣＯＢＯＬプログラム２２０から受け取ったクエリを解析する。メモリ上に構造定義データ２１１が展開されているので、クエリ変換プログラム１００は、クエリの解析を素早く実行することができ、その結果クエリの実行速度が速まる。
【００６４】
＜実施の形態３＞
図８は、本発明の実施の形態３に係るクエリ変換プログラム１００および周辺環境を示す図である。本実施形態３では、実施の形態１〜２で説明した構成に加え、ＣＯＢＯＬプログラム２２０を変換するＣＯＢＯＬソースコード変換プログラム１４０を新たに設けた。その他の構成は、実施の形態１〜２と同様であるため、記載を省略した。
【００６５】
図８の上段に記載しているＣＯＢＯＬプログラム２２０は、変換前のソースコードである。ＣＯＢＯＬソースコード変換プログラム１４０は、階層型ＤＢインタフェース２３０をコールする部分を、クエリ変換プログラム１００をコールするように書き換える。またプログラムの実行開始位置に、構造定義データ展開プログラム１０１をコールする部分を追加する。
【００６６】
図８の下線部分は、ＣＯＢＯＬソースコード変換プログラム１４０が書き換えた部分である。必ずしもクエリ変換プログラム１００や構造定義データ展開プログラム１０１を直接コールする必要はなく、別の外部ＣＯＢＯＬモジュールを介して間接的にこれらプログラムをコールするようにしてもよい。この外部ＣＯＢＯＬモジュールは、いずれかのプログラムが適宜生成すればよい。
【００６７】
なお、クエリ変換プログラム１００や構造定義データ展開プログラム１０１が、例えばＣ言語のように関数引数の数が関数作成時に固定されるプログラム言語によって作成されている場合も考えられる。この場合は、クエリ変換プログラム１００や構造定義データ展開プログラム１０１に引き渡す引数を任意個数に設定できるように、引数そのものは構造体などのデータ集合体に詰め込み、このデータ集合体のみを引き渡すようにするとよい。これにより、引数の固有による制約を受けることはなくなる。ただし、データ構造体に含まれる引数個数を指定する変数を追加するなど、個別の工夫は必要となる。図８下段の引数「ＰｒｍＣｏｕｎｔ」は、そのための引数である。
【００６８】
クエリ変換プログラム１００と構造定義データ展開プログラム１０１は、変換後のＣＯＢＯＬプログラム２２０または外部ＣＯＢＯＬモジュールから呼び出すためのインタフェースを内部的に備える。コンピュータ３００は、ＣＯＢＯＬプログラム２２０を実行する過程で、その内部インタフェースを呼び出すことにより、クエリ変換プログラム１００と構造定義データ展開プログラム１０１を呼び出す。
【００６９】
以上、本実施の形態３では、階層型ＤＢインタフェース２３０を呼び出す部分を、クエリ変換プログラム１００と構造定義データ展開プログラム１０１を呼び出すように、ＣＯＢＯＬプログラム２２０を自動的に変換する例を説明した。
【００７０】
＜実施の形態４＞
実施の形態１では、ＳＱＬ部品４１０は、キー値を指定してデータ値を（ａ）取得する、（ｂ）更新する、（ｃ）追加する、（ｄ）削除する、の４種類のＳＱＬ文を保持していることを説明した。ＣＯＢＯＬプログラム２２０から階層型データベース２１０に対して発行するクエリの他例として、以下のようなものが考えられる。
【００７１】
（階層型データベース２１０へのクエリ例その１）
ＣＯＢＯＬプログラム２２０は、階層型データベース２１０内のセグメントが最初に保持しているフィールドのデータ値を取得するクエリを発行することができる。これは、リレーショナルデータベース４００が有するテーブルの最初のレコードを取得するよう指示するＳＱＬ文として記述することができる。
【００７２】
（階層型データベース２１０へのクエリ例その２）
ＣＯＢＯＬプログラム２２０は、階層型データベース２１０内のセグメントが次に保持しているフィールドのデータ値を取得するクエリを発行することができる。これは、上記クエリ例その１を実行した後に順次実行するクエリであるが、上記クエリ例その１を１度も実行していないときに本クエリを実行した場合は、最初に当該セグメント内の最初のフィールドを取得し、以後は次のフィールドに順次アクセスすることになる。本クエリは、キー値の昇順または降順にクエリ結果をソートするＳＱＬ文として記述することができる。ただし、クエリ結果に順次アクセスする処理は、クエリ変換プログラム１００内で制御する必要がある。
【００７３】
（階層型データベース２１０へのクエリ例その３）
ＣＯＢＯＬプログラム２２０は、階層型データベース２１０内のセグメントが有するフィールドを全て読み終えると、下位セグメントのフィールドに読取カーソルを移動させて読み取りを継続させるようなクエリを発行することができる。同様に、読取対象とする親セグメントを固定して、その親セグメント配下のフィールドのみを読み取るようなクエリを発行することもできる。後者のクエリは、親セグメントに対応するテーブルのみを対象とするＳＱＬ文として記述することができる。
【００７４】
以上、本実施の形態４では、ＳＱＬ部品４１０が保持するＳＱＬ文の他例について説明した。
【００７５】
本実施の形態４で説明したクエリ例、および実施形態１で説明したクエリ例によって、ＣＯＢＯＬプログラム２２０から階層型データベース２１０に対して発行するクエリの全てを網羅することができる。すなわち、階層型データベース２１０に対してアクセスするアプリケーションを、リレーショナルデータベース４００に対してアクセスするアプリケーションに、矛盾なくかつ等価に移行することができる。
【００７６】
＜実施の形態５＞
以上の実施形態１〜４で説明した各プログラム、および各プログラムを実行するコンピュータを用いることにより、階層型データベース２１０および付随するＣＯＢＯＬアプリケーションを、リレーショナルデータベース４００および付随するＣＯＢＯＬアプリケーションに変換する、データベース変換システムを構築することができる。
【符号の説明】
【００７７】
１００：クエリ変換プログラム、１０１：構造定義データ展開プログラム、１１０：データベース変換プログラム、１２０：ＳＱＬ文生成プログラム、１３０：展開プログラム生成プログラム、１４０：ＣＯＢＯＬソースコード変換プログラム、２００：汎用機、２１０：階層型データベース、２１１：構造定義データ、２２０：ＣＯＢＯＬプログラム、２３０：階層型ＤＢインタフェース、４００：リレーショナルデータベース、４１０：ＳＱＬ部品。
【図１】
2011197988.tif 000003
【図２】
2011197988.tif 000004
【図３】
2011197988.tif 000005
【図４】
2011197988.tif 000006
【図５】
2011197988.tif 000007
【図６】
2011197988.tif 000008
【図７】
2011197988.tif 000009
【図８】
2011197988.tif 000010
【手続補正書】
【提出日】平成23年2月16日(2011.2.16)
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
汎用機が備える階層型データベースに対してアクセスする処理を前記汎用機に実行させるＣＯＢＯＬプログラムと、
前記階層型データベースに対する前記ＣＯＢＯＬプログラムからのアクセスを受け取って、前記階層型データベースをＲＤＢ形式に変換することによって生成したリレーショナルデータベースに対するアクセスに変換した上で前記リレーショナルデータベースにアクセスする処理を、コンピュータに実行させるクエリ変換プログラムと、
前記汎用機が備える階層型データベースを、前記クエリ変換プログラムを実行するコンピュータがアクセスする前記リレーショナルデータベースに変換する、データベース定義文を生成する処理を、第２コンピュータに実行させるデータベース変換プログラムと、
を有し、
前記クエリ変換プログラムは、
前記ＣＯＢＯＬプログラムから当該クエリ変換プログラムを呼び出すインタフェースを備え、
前記クエリ変換プログラムは、前記コンピュータに、
前記ＣＯＢＯＬプログラムから前記クエリ変換プログラムに対する呼び出しを受け取って前記クエリ変換プログラムを起動するステップと、
前記階層型データベースの構造を定義する構造定義データを読み込む構造取得ステップと、
ＣＯＢＯＬプログラムから前記階層型データベースに対してアクセスする階層型ＤＢアクセス処理のアクセスパラメータを受け取るステップと、
前記構造定義データと前記アクセスパラメータに基づき前記階層型ＤＢアクセス処理に対応する前記リレーショナルデータベース宛のクエリを特定する構造解析ステップと、
前記リレーショナルデータベースに対して発行するクエリのうちクエリに引き渡すパラメータを除いた部分を記述した１以上のＳＱＬ部品のなかから前記階層型ＤＢアクセス処理に対応するクエリを記述したＳＱＬ部品を選択するＳＱＬ選択ステップと、
前記ＳＱＬ選択ステップで選択したＳＱＬ部品に前記アクセスパラメータを引き渡して前記リレーショナルデータベース宛のクエリを実行するステップと、
を実行させることを特徴とするデータベース変換システム。
【請求項２】
前記クエリ変換プログラムは、前記構造取得ステップにおいて、前記コンピュータに、
前記構造定義データを前記コンピュータのメモリ上に展開させ、
前記構造解析ステップでは、前記コンピュータに、
前記メモリ上に展開されている前記構造定義データを用いて前記階層型ＤＢアクセス処理に対応する前記リレーショナルデータベース宛のクエリを特定させる
ことを特徴とする請求項１記載のデータベース変換システム。
【請求項３】
前記データベース変換プログラムは、前記第２コンピュータに、
前記構造定義データを読み込むステップと、
前記構造定義データが定義する前記階層型データベースの階層構造を反映したデータベース定義文を生成するＤＤＬ生成ステップと、
を実行させ、
前記ＤＤＬ生成ステップでは、前記第２コンピュータに、
前記階層型データベースの上位セグメントが有するフィールドを列として備える上位テーブルを作成するＳＱＬ文と、前記上位セグメントの下位セグメントが有するフィールドを列として備える下位テーブルを作成するＳＱＬ文を生成させ、
前記下位テーブルを作成するＳＱＬ文内に、前記下位セグメントが有するフィールドに対応する列に加えて、前記上位セグメントが有するキーフィールドに対応する列を指定する新たな列を記述させる
ことを特徴とする請求項１または２記載のデータベース変換システム。
【請求項４】
前記データベース変換プログラムが生成したＳＱＬ文によって生成されたデータベースに対してアクセスするＳＱＬ文を生成する処理を前記第２コンピュータに実行させるＳＱＬ文生成プログラムを有し、
前記ＳＱＬ文生成プログラムは、前記第２コンピュータに、
前記構造定義データを読み込むステップと、
前記構造定義データが記述している定義に基づき前記ＳＱＬ部品を生成するＳＱＬ文生成ステップと、
を実行させ、
前記ＳＱＬ文生成ステップでは、前記第２コンピュータに、
前記階層型データベースのセグメントに対応する前記リレーショナルデータベース内のテーブルを指定して、セグメントが有するキーに対応する列に対して検索条件を与え、条件を満たす最初のレコードにアクセスするＳＱＬ文と、
前記階層型データベースのセグメントに対応する前記リレーショナルデータベース内のテーブルを指定して当該テーブル内で前回与えられた検索条件を満たす次レコードにアクセスするＳＱＬ文と、
前記階層型データベース内セグメントへの新たなレコードの追加に相当する、前記リレーショナルデータベース内の対応するテーブルに新たなレコードを追加するＳＱＬ文と、
前記階層型データベース内のセグメントレコードの更新に相当する前記リレーショナルデータベース内の対応するテーブルレコードを更新するＳＱＬ文と、
前記階層型データベース内のセグメントレコードの削除に相当する前記リレーショナルデータベース内のテーブルレコードを削除するＳＱＬ文と、
を生成させることを特徴とする請求項１から３のいずれか１項記載のデータベース変換システム。
【請求項５】
前記汎用機が備える階層型データベースに対してアクセスするＣＯＢＯＬプログラムを、前記階層型データベースをＲＤＢ形式に変換することによって生成したリレーショナルデータベースに対してアクセスするＣＯＢＯＬプログラムに変換する処理を、第３コンピュータに実行させるＣＯＢＯＬソースコード変換プログラムを有し、
前記ＣＯＢＯＬソースコード変換プログラムは、前記第３コンピュータに、
前記ＣＯＢＯＬプログラムのうち前記階層型データベースに対してアクセスするインタフェースを呼び出す処理を、
前記クエリ変換プログラムを呼び出す処理に書き換えさせる
ことを特徴とする請求項１から４のいずれか１項記載のデータベース変換システム。
【手続補正書】
【提出日】平成23年4月20日(2011.4.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
汎用機が備える階層型データベースに対してアクセスする処理を前記汎用機に実行させるＣＯＢＯＬプログラムと、
前記階層型データベースに対する前記ＣＯＢＯＬプログラムからのアクセスを受け取って、前記階層型データベースをＲＤＢ形式に変換することによって生成したリレーショナルデータベースに対するアクセスに変換した上で前記リレーショナルデータベースにアクセスする処理を、コンピュータに実行させるクエリ変換プログラムと、
前記汎用機が備える階層型データベースを、前記クエリ変換プログラムを実行するコンピュータがアクセスする前記リレーショナルデータベースに変換する、データベース定義文を生成する処理を、第２コンピュータに実行させるデータベース変換プログラムと、
を有し、
前記クエリ変換プログラムは、
前記ＣＯＢＯＬプログラムから当該クエリ変換プログラムを呼び出すインタフェースを備え、
前記クエリ変換プログラムは、前記コンピュータに、
前記ＣＯＢＯＬプログラムから前記クエリ変換プログラムに対する呼び出しを受け取って前記クエリ変換プログラムを起動するステップと、
前記階層型データベースの構造を定義する構造定義データを読み込む構造取得ステップと、
ＣＯＢＯＬプログラムから前記階層型データベースに対してアクセスする階層型ＤＢアクセス処理のアクセスパラメータを受け取るステップと、
前記構造定義データと前記アクセスパラメータに基づき前記階層型ＤＢアクセス処理に対応する前記リレーショナルデータベース宛のクエリを特定する構造解析ステップと、
前記リレーショナルデータベースに対して発行するクエリのうちクエリに引き渡すパラメータを除いた部分を記述した１以上のＳＱＬ部品のなかから前記階層型ＤＢアクセス処理に対応するクエリを記述したＳＱＬ部品を選択するＳＱＬ選択ステップと、
前記ＳＱＬ選択ステップで選択したＳＱＬ部品に前記アクセスパラメータを引き渡して前記リレーショナルデータベース宛のクエリを実行するステップと、
を実行させることを特徴とするデータベース変換システム。
【請求項２】
前記クエリ変換プログラムは、前記構造取得ステップにおいて、前記コンピュータに、
前記構造定義データを前記コンピュータのメモリ上に展開させ、
前記構造解析ステップでは、前記コンピュータに、
前記メモリ上に展開されている前記構造定義データを用いて前記階層型ＤＢアクセス処理に対応する前記リレーショナルデータベース宛のクエリを特定させる
ことを特徴とする請求項１記載のデータベース変換システム。
【請求項３】
前記データベース変換プログラムは、前記第２コンピュータに、
前記構造定義データを読み込むステップと、
前記構造定義データが定義する前記階層型データベースの階層構造を反映したデータベース定義文を生成するＤＤＬ生成ステップと、
を実行させ、
前記ＤＤＬ生成ステップでは、前記第２コンピュータに、
前記階層型データベースの上位セグメントが有するフィールドを列として備える上位テーブルを作成するＳＱＬ文と、前記上位セグメントの下位セグメントが有するフィールドを列として備える下位テーブルを作成するＳＱＬ文を生成させ、
前記下位テーブルを作成するＳＱＬ文内に、前記下位セグメントが有するフィールドに対応する列に加えて、前記上位セグメントが有するキーフィールドに対応する列を指定する新たな列を記述させる
ことを特徴とする請求項１または２記載のデータベース変換システム。
【請求項４】
前記データベース変換プログラムが生成したＳＱＬ文によって生成されたデータベースに対してアクセスするＳＱＬ文を生成する処理を前記第２コンピュータに実行させるＳＱＬ文生成プログラムを有し、
前記ＳＱＬ文生成プログラムは、前記第２コンピュータに、
前記構造定義データを読み込むステップと、
前記構造定義データが記述している定義に基づき前記ＳＱＬ部品を生成するＳＱＬ文生成ステップと、
を実行させ、
前記ＳＱＬ文生成ステップでは、前記第２コンピュータに、
前記階層型データベースのセグメントに対応する前記リレーショナルデータベース内のテーブルを指定して、セグメントが有するキーに対応する列に対して検索条件を与え、条件を満たす最初のレコードにアクセスするＳＱＬ文と、
前記階層型データベースのセグメントに対応する前記リレーショナルデータベース内のテーブルを指定して当該テーブル内で前回与えられた検索条件を満たす次レコードにアクセスするＳＱＬ文と、
前記階層型データベース内セグメントへの新たなレコードの追加に相当する、前記リレーショナルデータベース内の対応するテーブルに新たなレコードを追加するＳＱＬ文と、
前記階層型データベース内のセグメントレコードの更新に相当する前記リレーショナルデータベース内の対応するテーブルレコードを更新するＳＱＬ文と、
前記階層型データベース内のセグメントレコードの削除に相当する前記リレーショナルデータベース内のテーブルレコードを削除するＳＱＬ文と、
を生成させることを特徴とする請求項３記載のデータベース変換システム。
【請求項５】
前記汎用機が備える階層型データベースに対してアクセスするＣＯＢＯＬプログラムを、前記階層型データベースをＲＤＢ形式に変換することによって生成したリレーショナルデータベースに対してアクセスするＣＯＢＯＬプログラムに変換する処理を、第３コンピュータに実行させるＣＯＢＯＬソースコード変換プログラムを有し、
前記ＣＯＢＯＬソースコード変換プログラムは、前記第３コンピュータに、
前記ＣＯＢＯＬプログラムのうち前記階層型データベースに対してアクセスするインタフェースを呼び出す処理を、
前記クエリ変換プログラムを呼び出す処理に書き換えさせる
ことを特徴とする請求項１から４のいずれか１項記載のデータベース変換システム。