説明

データ変換方法、その装置およびそのプログラム

【課題】データベースを変換する際に、適切に変換されなかったSQL文を抽出することを可能にするデータ処理方法を提供する。
【解決手段】変換検証装置117では、Accessデータベースシステム111で処理するプログラムに、SQL文を抽出するコードを挿入し、実行時にSQL文を自動的に抽出し、SQL−SERVERデータベースシステム113で処理されるSQL文に変換する。そして、Accessデータベースシステム111とSQL−SERVERデータベースシステム113とでSQL文を実行させて、結果を比較し、結果が不一致のSQL文を特定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースシステムの移行に伴う処理を行うデータ変換方法、その装置およびそのプログラムに関する。
【背景技術】
【0002】
事業規模の変化などに応じて、所定のデータベースシステムから他のデータベースシステムへ移行する場合がある。かかるデータベースシステムの移行に関する技術としては、例えば特許文献1に開示された技術がある。
【0003】
特許文献1記載されているように、データベースシステムに使用可能なSQL文はシステム毎に異なっている。そこで、特許文献1のシステムにおいては、GUI技術とSQL文自動変換処理とを連携させることによりデータベースシステムをスムーズに移行するようにしている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2002−351710号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
特許文献1において変換対象としているのはSQL文自体であるが、SQL文のフォーマットは多様であり、その全ての構文を分析して、変換することができないという問題がある。
このような状況において、本出願人は、マイクロソフト社のAccess(商標)のデータベースを、SQLサーバのデータベースに変換(アップサイジング)するプログラムを提供している。
ところで、このようなプログラムの開発において、Accessのデータベースのなかで、適切に変換できなかったSQL文を抽出できれば、次の開発に役に立つ。
しかしながら、従来では、このように適切に変換できなかったSQL文を抽出することはできない。
【0006】
そこで、本発明は、データベースを変換する際に、適切に変換されなかったSQL文を抽出することを可能にするデータ処理方法、その装置およびそのプログラム法を提供することを目的とする。
【課題を解決するための手段】
【0007】
上述した従来技術の問題を解決し、上述した目的を達成するために、本発明の変換検証方法は、第1のデータベースシステムで処理される第1のプログラム内に記述された前記第1のデータベースシステムへの問い合わせ命令であるクエリを記述したSQL文データを、第2のデータベースで処理される第2のプログラム内の同じ機能のクエリを記述したSQL文データに変換した場合の前記変換を検証する変換検証方法であって、前記第1のプログラムに、当該第1のプログラム内のテーブルデータに対して操作を行う第1のSQL文データを取得する取得操作コードを挿入する第1の工程と、前記第1のプログラムの実行過程で前記取得操作コードによって取得された前記第1のSQL文データを、前記第2のデータベースの第2のSQL文データに変換した結果を取得する第2の工程と、前記第1のSQL文データを前記第1のデータシステムで実行し、前記第2のSQL文データを前記第2のデータベースシステムで実行する第3の工程と、前記第3の工程における前記第1のSQL文データの処理に応じて取得したデータと、前記第2のSQL文データの処理に応じて取得したデータとを比較する第4の工程とをコンピュータが実行する。
【0008】
本発明の変換検証装置は、第1のデータベースシステムで処理される第1のプログラム内に記述された前記第1のデータベースシステムへの問い合わせ命令であるクエリを記述したSQL文データを、第2のデータベースで処理される第2のプログラム内の同じ機能のクエリを記述したSQL文データに変換した場合の前記変換を検証する変換検証装置であって、前記第1のプログラムに、当該第1のプログラム内のテーブルデータに対して操作を行う第1のSQL文データを取得する取得操作コードを挿入する挿入手段程と、前記第1のプログラムの実行過程で前記取得操作コードによって取得された前記第1のSQL文データを、前記第2のデータベースの第2のSQL文データに変換した結果を取得する変換結果取得手段程と、前記第1のSQL文データを前記第1のデータシステムで実行し、前記第2のSQL文データを前記第2のデータベースシステムで実行するSQL実行手段と、前記SQL実行手段における前記第1のSQL文データの処理に応じて取得したデータと、前記第2のSQL文データの処理に応じて取得したデータとを比較する比較手段とを有する。
【0009】
本発明のプログラムは、第1のデータベースシステムで処理される第1のプログラム内に記述された前記第1のデータベースシステムへの問い合わせ命令であるクエリを記述したSQL文データを、第2のデータベースで処理される第2のプログラム内の同じ機能のクエリを記述したSQL文データに変換した場合の前記変換を検証するコンピュータが実行するプログラムであって、前記第1のプログラムに、当該第1のプログラム内のテーブルデータに対して操作を行う第1のSQL文データを取得する取得操作コードを挿入する第1の工程と、前記第1のプログラムの実行過程で前記取得操作コードによって取得された前記第1のSQL文データを、前記第2のデータベースの第2のSQL文データに変換した結果を取得する第2の工程と、前記第1のSQL文データを前記第1のデータシステムで実行し、前記第2のSQL文データを前記第2のデータベースシステムで実行する第3の工程と、前記第3の工程における前記第1のSQL文データの処理に応じて取得したデータと、前記第2のSQL文データの処理に応じて取得したデータとを比較する第4の工程とを前記コンピュータに実行させる。
【図面の簡単な説明】
【0010】
【図1】図1は、本発明の実施形態に係わるデータシステムの構成図である。
【図2】図2は、本発明の実施形態に係わる変換検証装置の構成図である。
【図3】図3は、図1および図2に示す変換検証装置の処理を説明するためのフローチャートである。
【図4】図4は、本発明の実施形態で用いられるSQL文取得テーブルの一例を説明するための図である。
【図5】図5は、SQL文字列取得用関数呼び出し文を挿入する方法を説明するための図である。
【図6】図6は、実行結果テーブルを説明するための図である。
【図7】図7は、図1に示す変換装置の変換パターンを説明するための図である。
【図8】図8は、本発明の実施形態に係わる変換装置の機能ブロック図である。
【図9】図9は、図8に示す変換装置の処理フローを説明するための図である。
【図10】図10は、図8に示す変換装置の処理結果の一例である。
【図11】図11は、図9に示すタイプ判定ステップの詳細のフローチャートである。
【図12】図12は、図9に示すタイプ補正ステップの詳細のフローチャートである。
【図13】図13は、図8に示す変換装置の処理結果の一例である。
【図14】図14は、図8に示す変換装置の処理結果の一例である。
【図15】図15は、図8に示す変換装置の処理結果の一例である。
【図16】図16は、図9に示す呼び出し方法決定ステップの詳細のフローチャートである。
【図17】図17は、図9に示すSQL文生成ステップの詳細のフローチャートである。
【図18】図18は、図9に示すクエリ作成ステップの詳細のフローチャートである。
【発明を実施するための形態】
【0011】
以下、本発明の実施形態に係わるデータシステムについて説明する。
図1は、本発明の実施形態に係わるデータシステム101の構成図である。
図1に示すように、データシステム101では、移行元のAccessデータベースシステム111がマイロソフト社のAccessであり、移行先のSQL−SERVERデータベースシステム113が同じくマイクロソフト社のSQL Serverである。
変換装置115は、Accessデータベースシステム111のAccessプログラムを、SQL−SERVERデータベースシステム113で処理可能なSQL−SERVERプログラムに変換する。
変換検証装置117は、変換装置115による上記変換が適切に行われたか否かを検証する。
なお、移行元及び移行先のデータベースシステムは、上述したものに限定されるものではない。
【0012】
ところで、関係データベースシステムでは、クエリという、データベース管理システムに対する処理要求(問い合わせ)を文字列を用いて、データの検索や更新、削除などの命令をシステムに発行する。検索クエリでは、対象となるテーブルやデータの抽出条件、並べ方などを指定する。一度生成したクエリは保存しておいて何度も使うことができる。
関係データベースでシステムでは、クエリの記述にSQLという言語を使う。
【0013】
マイクロソフト社のAccess(商標)等のような汎用的な関係データべース(本発明の第1のデータベースシステムの一例)では、パフォーマンスやスケラビリティよりも、初心者でもプログラムできるように、クエリのタイプは定めていない。
一方、SQL Server等のより高度なデータベース(本発明の第2のデータベースシステムの一例)では、複数のクエリのタイプを用意し、それぞれのクエリについて記述方法等の制約を設けている。これは、データベースを基盤とするアプリケーションのパフォーマンスとスケーラビリティを向上させるためである。
本実施形態では、図1に示すように、マイクロソフト社のAccessのプログラム(SQL文)を、SQL Serverで処理可能なプログラムに変換するシステムイに用いられる変換検証装置について説明する。
【0014】
以下、本発明の実施形態に係わる変換検証装置117の具体例を説明する。
図2は、本発明の実施形態に係わる変換検証装置117の構成図である。
図2に示すように、変換検証装置117は、例えば、インタフェース21、ディスプレイ22、操作部23、メモリ24および処理回路25を有し、これらがバス20を介して接続されている。
【0015】
インタフェース21は、例えば、他のコンピュータと通信を行うために用いられる。
ディスプレイ22は、処理回路25が実行するプログラムPRGが提供する様々な画面を表示する。
【0016】
操作部23は、キーボードやマウス等の操作手段である。
メモリ24は、処理回路25が実行するプログラムPRG、処理回路25の処理に用いられるデータを一時的に記憶する。
処理回路25は、プログラムPRGを実行して、変換検証装置117の処理を統括的に制御する。処理回路25は、本実施形態のフローチャート等で記載した各処理において、処理過程でのデータを逐次メモリ24に書き込み、それを読み出す。
本実施形態で示されるデータ変換装置1の処理は、プログラムPRGに記述されている。
【0017】
図3は、図1および図2に示す変換検証装置117の処理を説明するためのフローチャートである。
ステップST11:
変換検証装置117の処理回路25は、Accessデータベースシステム11で処理されるAccessのプログラムPRG−AのコピーのプログラムCPRG−Aを生成し、これをメモリ24に書き込む。
【0018】
ステップST12:
処理回路25は、メモリ24に記憶されたプログラムCPRG−A内に、図4に示すSQL文取得テーブルデータSQTを作成する。
【0019】
ステップST13:
処理回路25は、プログラムCPRG−A内のオブジェクトデータを、テキストファイルデータTXTに出力する。
ここで、オブジェクトデータとは、例えば、フォーム、レポート、モジュール等の機能を記述したデータである。
【0020】
ステップST14:
処理回路25は、上記テキストファイルデータTXTにSQL文取得関数を追加した新規テキストファイルTXTNを生成する。
具体的には、処理回路25は、テキストファイルデータTXTを開いて、当該テキストファイルデータTXTNに記載されたコードをコピーした新規テキストファイルTXTNを生成する。
そして、処理回路25は、新規テキストファイルTXTN内のコード(文字列)を先頭から順に読みだし、例えば、SQL文の実行コマンドを示す図5(A)に示す文字列と、その後にある図5(B)に示す文字列が存在するか否かを判断する。
そして、処理回路25は、上記図5(A),(B)に示す文字列が存在すると判断した場合に、新規テキストファイルTXTの図5(A)に示す文字列の行の一つ上の行に、SQL文字列取得用関数呼び出し文を追加する。
当該SQL文字列取得用関数呼び出し文は、実行時に、その直後にある図5(A)に示す文字列に基づいて実行されたSQL文を呼び出して、SQL文取得テーブルデータおよび実行結果テーブルに格納する。
【0021】
ステップST15:
処理回路25は、プログラムCPRG−Aに対して新規テキストファイルTXTNを出力する。これにより、プログラムCPRG−A内に新規テキストファイルTXTNが格納される。具体的には、テキストファイルTXTに対応するオブジェクトデータが、新規テキストファイルTXTNに記載されたオブジェクトデータに置き換えられる。
また、処理回路25は、SQL文字列取得用関数をプログラムCPRG−Aにエクスポート(登録)する。これにより、プログラムCPRG−AでSQL文字列取得用関数が利用可能になる。
【0022】
ステップST16:
処理回路25は、プログラムCPRG−Aの一連のオペレーション(操作)を実行する。これにより、プログラムCPRG−A内の新規テキストファイルTXTNのSQL文字列取得用関数呼び出し文が実行され、その直後にあるSQL文が抽出されてSQL文取得テーブルデータおよび実行結果テーブルデータに格納される。
【0023】
ステップST17:
処理回路25は、ステップST16で抽出されたAccessのSQL文を、変換検証装置117に出力してSQL−SERVERデータベースシステム113で処理可能なSQL文に変換する。そして、処理回路25は、変換後のSQL文を、SQL文取得テーブルデータおよび実行結果テーブルデータに格納する。
【0024】
ステップST18:
処理回路25は、ステップST16で抽出されたAccessデータベースシステム11のSQL文と、ステップST17で変換したSQL−SERVERデータベースシステム113で処理可能なSQL文内のSELECT以外のSQL文をSELECT文に変換する。当該変換については、図7〜図18を参照して後に詳細に説明する。
【0025】
ステップST19:
処理回路25は、ステップST18で変換されたAccessデータベースシステム11のSQL文をAccessデータベースシステム11に出力して実行させる。処理回路25は、当該実行結果をAccessデータベースシステム11から入力して図6に示す実行結果テーブル内の「MDB SQL文字列」の実行結果の各フィールドに格納する。
また、処理回路25は、ステップST18で変換されたSQL−SERVERデータベースシステム113のSQL文をSQL−SERVERデータベースシステム113に出力して実行させる。処理回路25は、当該実行結果をSQL−SERVERデータベースシステム113から入力して図6に示す実行結果テーブル内の「ADP SQL文字列」の実行結果の各フィールドに格納する。
【0026】
ステップST20:
処理回路25は、図6に示す実行結果テーブル内で、「MDB SQL文字列」の実行結果と、「ADP SQL文字列」の実行結果とを、対応する実行結果の属性毎に比較する。
処理回路25は、当該比較において、例えば、レコード数、フィールド数、最初のレコードのデータ値、中間のレコードのデータ値、最終のレコードのデータ値等の所定のチェック項目を比較する。
処理回路25は、上記チェック項目のうち一つでも不一致の場合には、SQL文取得テーブルデータSQT内の当該SQL文に対応するレコードのフラグデータFLAGに「1」を設定する(フラグを立てる)。
また、処理回路25は、当該不一致のSQL文について、そのAccessのプログラムPRG−Aの名前、モジュールライン位置、AccessのSQL文、SQL SERVERのSQL文、不具合内容を示すレポートデータを生成する。
不具合内容は、例えば、レコード数不一致、フィールド数不一致、最初のレコードのデータ値不一致、中間のレコードのデータ値不一致、最終のレコードのデータ値不一致、SQL−SERVERデータベースシステム113の実行不可能(エラー内容)等を示している。
【0027】
ステップST21:
処理回路25は、図1に示すエラー修正装置19にステップST20で生成したレポートデータを送信する。
エラー修正装置19は、レポートデータを基に、SQL SERVERのSQL文を修正する。
【0028】
ステップST22:
エラー修正装置19は、ステップST21で修正したSQL文を、例えば、SQL−SERVERデータベースシステム113に送信し、SQL Serverで処理可能なプログラムに反映させる。
【0029】
以下、図3のステップST18の処理の詳細について説明する。
[SELECT…INTOの場合]
変換前
SELECT
Table_1.Filed_1, Table_1.Filed_2, Table_1.Filed_3, Table_1.Filed_4, Table_1.Filed_5,
Table_1.Filed_6 INTO Table_3_Temp
FROM
Table_1;
【0030】
変換後
SELECT
Table_1.Filed_1, Table_1.Filed_2, Table_1.Filed_3, Table_1.Filed_4,
Table_1.Filed_5, Table_1.Filed_6
FROM
Table_1;
【0031】
[UPDATEの場合]

UPDATE
変換前
UPDATE
Table_1 INNER JOIN Table_2 ON Table_1.Filed_1 = Table_2.Filed_1 SET
Table_1.Filed_1 = "OK"
WHERE
(((Table_1.Filed_2)="ABC"));

変換後
SELECT
Table_1 INNER JOIN Table_2 ON Table_1.Filed_1 = Table_2.Filed_1
【0032】
[DELETEの場合]
変換前
DELETE
Table_2.*
FROM
Table_2;
【0033】
変換後
SELECT
Table_2.*
FROM
Table_2;

【0034】
[INSERT INTOの場合]
変換前
INSERT
INTO Table_2 ( Filed_1, Filed_2, Filed_3, Filed_4, Filed_5, Filed_6 )
SELECT
Table_1.Filed_1 AS EEE, Table_1.Filed_2, Table_1.Filed_3, Table_1.Filed_4,
Table_1.Filed_5, Table_1.Filed_6
FROM
Table_1;
【0035】
変換後
SELECT
Table_1.Filed_1 AS EEE, Table_1.Filed_2, Table_1.Filed_3, Table_1.Filed_4,
Table_1.Filed_5, Table_1.Filed_6
FROM
Table_1;
【0036】
以上説明したように、変換検証装置117によれば、Accessデータベースシステム111で処理するSQL文のうち、変換装置115において適切に変換されなかったSQL文を自動的に抽出することができる。
そのため、適切に変換できなかったSQL文の情報を取得して、変換装置115の変換アルゴリズムの改良に役立てることができる。
また、データシステム101では、変換装置115で適切に変換できなかったSQL文をエラー修正装置119に出力することで、エラー修正処理を個別に行うことができる。
また、変換検証装置117では、図3のステップST18に示すように、SELECT文以外をSELECT文に変換することで、テーブルデータに対しての操作でデータ取得を行わない場合でも、当該操作に係るデータを取得して、比較処理を行うことができる。
【0037】
以下、図1に示す変換検証装置117を詳細に説明する。
マイクロソフト社のAccess等のような汎用的な関係データべース(本発明の第1データベースシステムの一例)では、パフォーマンスやスケラビリティよりも、初心者でもプログラムできるように、クエリのタイプは定めていない。
一方、SQL Server等のより高度なデータベース(本発明の第2データベースシステムの一例)では、複数のクエリのタイプを用意し、それぞれのクエリについて記述方法等の制約を設けている。これは、データベースを基盤とするアプリケーションのパフォーマンスとスケーラビリティを向上させるためである。
例えば、項目の並べ替え文(ORDER BY)の有無、パラメータの有無、追加・削除・更新処理の有無、他のクエリからのネストの有無を制約条件として、下記表1に示すように組み合わせて、クエリのタイプを以下の3つに規定することである。
これらの複数のクエリは、「ビュー」、「テーブル関数」および「ストアドプロシージャ」の3タイプに分類される。
本実施形態によるデータベース移行システムは、Accessのクエリ(以下、元クエリとも記す)の各々に対して、その内容に基づいて適切なタイプのSQL Serverのクエリ(以下、変換後クエリとも記す)に変換する。
【0038】
【表1】




【0039】
・「他のクエリからのネスト」→自分がだれかの子か
・「追加・削除・更新処理」→フォームからの呼び出し時に必要な機能
・「フォーム」とは画面上の入力ボックス等の起動するためのものであり、変更、削除、追加等の機能を必要とする
上述した表1において、「×」→禁止とした箇所の技術的理由を以下に示す。
【0040】
[ビューがORDER BY句を含めない理由]
SQL文法上は、ORDER
BY句を含めることは可能である。しかし、ビューを実行する際、データベースエンジンは最適化を行い、パフォーマンスを重視した実行プランにより実行し、並べ替えられた結果を返さない。これは、一般に並べ替え処理は、全データを走査し正しい順序で結果を返さなければいけないため、非常に高負荷な処理であるためである。様々な局面で多用されるビューに対してはパフォーマンスを優先するために、このように規定している。
これに対して、ストアドプロシージャは、最適化を行わないため、パフォーマンスは低下するが、並べ替えられた結果をそのまま返すことが可能である。
【0041】
[ビューがパラメータを含めない理由]
ORDER BY句の理由と同様、全行走査が必要なパラメータ指定による絞り込みは、パフォーマンスの観点から禁止している。
【0042】
[関数が追加・更新・削除できない理由]
ビューおよびストアドプロシージャから返される結果は、オリジナルのデータベース(メモリ)のテーブルの値に対して直接的に参照可能な状態で返される。つまり、返された結果を変更すると実際のデータの値が変更される。
これに対して、関数を実行する際には、データベースエンジンが内部的に一時テーブルを生成する。これは、元となるテーブルのレコードロックを回避し、他の操作に障害を与えないためである。一時テーブルに結果を挿入し、その一時テーブルを結果として返す。このため、返された結果は、テーブルの値に対して直接的な参照はできない。また、上述のように一時テーブルを介するため、常に実行時に、一時テーブルの生成と削除が繰り返されパフォーマンスは低い。
【0043】
[ストアドプロシージャが他のクエリからのネストを禁止している理由]
ストアドプロシージャは、複数のSQL文を名前付きバッチ処理として再利用可能にするために用いられる。ストアドプロシージャの内容によっては、複数の結果を返すことも可能であり、値を返さないことも可能である。
返すデータ型がテーブルデータ型ではないため、文法上、SQL内で結果を取得する目的で使用する(FROM句の中でテーブルの様に使用する)ことは許可されていない。
すなわち、SQL内で、FROM句内でテーブルとして用いることができるのは、テーブル型の値を返すビューと関数の返り値である。
【0044】
以下、SQL SERVER(移行先データベースシステム)で規定されたクエリの3つのタイプについて説明する。
[ビュー]
ビューは、関数・ストアドプロシージャよりパフォーマンスが高い。
ビューとは,「FROM」句で指定した元となるテーブルから、「SELECT」句で指定した項目を検索して取り出す。また、「WHERE」句で検索条件を指定できる。
【0045】
[関数]
本実施形態において、関数とは、インラインテーブル値関数あるいは複数ステートメントテーブル値関数等のテーブル関数である。
関数は、上記表1の制約の他に、例えば、以下の特性がある。
・アクションクエリを含まない
・テーブル型の戻り値が必ずある
【0046】
ここで、アクションクエリとは、テーブルレコードに対して削除、変更または追加の何らかのアクションを施すクエリをいう。具体的には、DELETE文、UPDEATE文、INSERT文、SELECT INTO文を含むクエリをいう。
【0047】
ACCESS等のクエリは、常に単一のSQL文(機能記述)であるため、インラインテーブル値関数の必要十分の機能を備えている。
インラインテーブル値関数のSQL文を単一にするのは、単一のSQL文から、データの参照元(テーブルなど)、抽出条件および結果として返されるテーブル値の項目名とデータ型が決定可能だからである。
【0048】
複数ステートメントテーブル値関数は、内部で変数を定義し、制御文(IF ELSE等)を行えるテーブル値関数である。インラインテーブル値関数とは異なり、複雑な制御を行える分、結果として返すテーブル値の項目名とデータ型を明示的に宣言しなければならない。
これらのテーブル値関数は、ビューに代わる強力なツールになる。テーブル値関数は、クエリ内のテーブル式またはビュー式を指定できる場所で使用できる。ビューに含めることができるのは、1 つの SELECT ステートメントだけだが、複数ステートメントテーブル値関数には、ビューで使用できるロジックより高度なロジックを使用できる追加のステートメントを含めることができる。
テーブル値関数を、単一の結果セットを返すストアドプロシージャの代わりに使用することもできる。テーブル値関数で返されるテーブルはSQLステートメントのFROM句から参照できるが、ストアドプロシージャから返される値は、テーブル型ではないため、参照できない。
【0049】
なお、関数は、クエリを作る可能性があり、そのクエリがフォームで参照される可能性がある。そのため、関数の子クエリを有する場合は、データ操作の可能性があると判断する。
【0050】
[ストアドプロシージャ]
ストアドプロシージャは、上記表1の制約の他に、例えば、以下の特性を有している。
・パフォーマンス中程度
・アクションクエリを含むことが可能。アクションクエリは、ストアドしかもてない。
・戻り値の有無は任意だが、戻り値は値のみでありテーブル型ではない。
・キャッシュができる
【0051】
SQLサーバ(データベース)は、個人データや機密データを含む。ユーザに随時許可を与えると、時として、この情報のセキュリティおよび機密性を脅かすことがある。
そのため、事実上、わずかな部分(パラメータなど)だけしか変更できない組み込みのクエリである「ストアドプロシージャ」を用いる。
ストアドプロシージャはSQL標準の基礎をなす機能であり、データベース管理者がデータベースに対して実行されるクエリを事前に決定することを可能にする、典型的なプログラミング言語における機能と類似している。このクエリ事前決定は、データベース挙動におけるより高いレベルのセキュリティおよび性能予測可能性(performance
predictability)を提供することができる。リレーショナルデータベースの多くのユーザは、もっぱらストアドプロシージャに頼って、任意の(例えば随時の)クエリがデータベースによって消費され得ないようにしている。
【0052】
ストアドプロシージャの場合は、例えば、「CREATE
PROCEDURE ストアドプロシージャ名」とする。PROCEDUREというキーワードが、ストアドプロシージャ生成の指示である。AS句以降には、定義するSQL文を記述する。
CREATE文で生成したストアドプロシージャは、ビューと同様にデータベースサーバ上に格納される。一度定義したストアドプロシージャは、権限の設定を行えば、ほかのユーザから呼び出すことも可能である。
AS句に定義するSQL文は、SELECT文をはじめ、ほとんどすべてのSQL文が使用できる。また、1つのSQL文だけではなく、複数のSQL文の指定が可能である。SQL文の実行は、基本的には定義した順番に行われるが、ほかの言語と同じように実行順を制御したり、繰り返させたりすることも可能である。
【0053】
「データベース上に名前を付けて保存しておいたSELECT文を呼び出す」という単純な機能においては、ストアドプロシージャはビューと同じである。ストアドプロシージャが実力を発揮するのは、SQL
SERVERでの実行時である。データベースにプログラムを保存しておく主な目的は、次のとおりである。
・繰り返して使用されるデータベースに対する処理を共通化して実装することによって、データの矛盾を防ぎたい
・単独のSELECT文では処理できない複雑な条件による問い合わせを、クライアント・プログラムではなくデータベース上で実行することで、クライアントとデータベース間の通信量(トラフィック量)を抑えてレスポンスタイムを短縮化する。
一連の処理をストアドプロシージャでまとめて生成すれば、データベースへの問い合わせはストアドプロシージャを一度呼び出すだけで済む。多量の顧客からの注文を処理するシステムでは、クライアントとデータベース間での通信量を大幅に削減することが可能になる。
すなわち、ストアドプロシージャの処理は、SQLサーバ(データベースシステム)、コードを実行しながら、その間にオリジナルのデータベースのテーブルの値の追加・変更・削除をして処理を進められる。最終的な結果が出たときに、それをSQLサーバからクライアントに戻す。
一方、関数で同様な処理を行おうとすると、実行中に、テーブルの追加・変更・削除はできない。
【0054】
上述したように、ACCESS等のような汎用的な関係データべースでは、パフォーマンスやスケラビリティよりも、初心者でもプログラムできるように、クエリのタイプは定めていない。
一方、SQL SERVER等のより高度なデータベースでは、データベースを基盤とするアプリケーションのパフォーマンスとスケーラビリティを向上させるために、複数のクエリのタイプを用意し、それぞれのクエリについて記述方法等の制約を設けている。
そのため、AccessクエリをSQL
Serverクエリへ移行する際、種々の条件を加味しながら適切なSQL Serverクエリのタイプを決定していかなければならない。
【0055】
本実施形態変換装置では、上述した表1の制約条件を基に、図7に示す変換パターンに基づいて、Accessで用いられていたAccess用SQL文を、適切なSQL
SERVER用SQLに変換し、続いて、それによって生成したSQL文を用いて、SQL SERVERで使用可能なクエリを生成する。
図7に示す変換パターンは、上述したSQL
SERVERクエリの表1に示す制約条件と、上述した特性に基づいて、より高いパフォーマンスと操作性を得られるように、発明者が考え出したものである。
すなわち、変換パターンは数多く考えられるが、そのなかで、図7に示す変換パターンが、パフォーマンスと操作性の面から、非常に優れている。
【0056】
本実施形態では、移行元のデータベース内のクエリの内容を基に、移行先のデータベースのクエリのタイプを判定できるものについては、そのタイプを用いる。
また、移行元のデータベース内のクエリのうち、タイプが判定できないクエリについては「他タイプ」と判定し、いずれのタイプであっても機能が同じになるように、クエリを生成する。
【0057】
本実施形態の変換装置では、タイプ決定ステップにおいて、移行元データベースシステム内の元クエリの子クエリが、関数タイプ、ストアドプロシージャタイプあるいは他タイプである場合に、その元クエリを他タイプと判定する。これは、その元クエリに要求される機能を必ず満たす変換後の一つのクエリを特定できないためである。
そして、当該変換装置は、他タイプあるいはストアドプロシージャタイプと判定された元クエリについては、その元クエリの機能記述と同等の機能記述を含むストアドタイプの変換後クエリを生成すると共に、その元クエリの機能記述と同等の機能記述を含む関数タイプの変換後クエリを生成する。
【0058】
ここで、元クエリの機能記述と同等の機能記述を含むストアドタイプの変換後クエリを生成するのは、元クエリの子クエリに対しての操作性の観点の理由である。
また、元クエリの機能記述と同等の機能記述を含み関数タイプの変換後クエリを生成するのは、元クエリの親クエリが存在する可能性があるという観点の理由である。
「他タイプ」とは、処理過程において仮想的に規定されるタイプであり、移行元および移行後のデータベースシステムでは規定されていない。この他タイプは、変換後クエリを生成する生成方法を選択する条件判断に用いられる。
すなわち、他タイプと判定された元クエリ(子クエリが、テーブル関数タイプ、ストアドプロシージャタイプあるいは他タイプである場合)である対象クエリについては、子クエリに対してデータ操作(追加・削除・更新処理)の可能性があるため、これらを許可する(表1)ストアドプロシージャタイプの変換後クエリを生成する。
なお、関数は、クエリを作る可能性があり、そのクエリがフォームで参照される可能性がある。そのため、関数の子クエリを有する場合は、データ操作の可能性があると判断する。
【0059】
また、ストアドプロシージャと判定された元クエリについては、ストアドプロシージャタイプの変換後クエリを生成する。
ここで、ストアドプロシージャタイプの変換後クエリは、他のクエリからのネスト(自分がだれかの子供になること)を禁止する(図7)。一方、この変換後クエリは、他のクエリの子となる“可能性”がある。
そのため、対象クエリの機能記述と同等の機能記述を含む関数タイプの変換後クエリを生成する。
このとき、関数タイプの変換後クエリの名称は、例えば、ストアドプロシージャタイプの変換後クエリの名称と異なるものを用いる。
これにより、他タイプと判定された元クエリである対象クエリについて、ストアドプロシージャタイプの変換後クエリと、関数タイプの変換後クエリとの2つの変換後クエリが生成されるが、下層のクエリに対してのデータ操作機能と、親クエリがある場合における関数タイプとしての機能発揮との双方を実現できる。
【0060】
このように、ストアドプロシージャあるいは他タイプと判定されたクエリについては、親クエリが実際あるかどうかに係わらず、親クエリがある場合でも問題ないように、全ての場合において、同じ機能のストアドプロシージャタイプの変換後クエリの他に、関数タイプの変換後クエリを生成する。これにより、無駄なクエリは多くなるが、変換後のアプリケーションの拡張を想定した際、関数を手作業で生成するという非常にコストのかかる作業を大幅に軽減できる。
実際にツール開発の現場では、本実施形態の変換装置を用いたシステムにより、大幅な作業軽減が図れている。アップサイジングという総合的なアプリケーション変換(データの移行だけではなく機能性の移行)を行う際、どうしてもクエリの変換だけでは実現できない機能がある場合がある。その際には、既存のクエリを使用して新たなクエリを生成するが、ここでネスト可能な関数が生成済みかどうかで大きく作業コストが変わる。消すのは簡単だが、作るのは大変であるということに着目した技術である。
【0061】
以下、本発明の実施形態に係わる変換装置の具体例を説明する。
図8は、本発明の実施形態に係わる変換装置115の機能ブロック図である。
図8に示すネスト関係特定部11が図9に示すネスト関係特定ステップSQ201を実行し、タイプ決定部12がタイプ決定ステップSQ202を実行し、呼び出し方法決定部13が呼び出し方法決定ステップSQ205を実行し、SQL文生成部14がSQL生成ステップSQ206を実行し、クエリ生成部15がクエリ生成ステップSQ207を実行する。
【0062】
[ネスト関係特定ステップSQ201]
ネスト関係特定ステップSQ201は、Accessのクエリのネスト関係、即ち他のクエリから参照される関係にあるか否かを特定するものである。
図10に例示される4つのクエリのネスト関係について説明すると、クエリCはクエリDを参照して生成され、クエリBは当該生成されたクエリCを参照して生成され、更にクエリAはクエリBを参照して生成される。
ここで、以下の説明においては、隣接する2つのクエリを例にすると、参照する方のクエリを親クエリと、その親クエリに参照される方のクエリを子クエリと表記する。
図10の例では、クエリCはクエリDの親クエリであり、クエリDはクエリCの子クエリとなる。また、参照される側のクエリを参照する側のクエリに対して下階層にあると呼び、参照する側のクエリを参照される側のクエリに対して上階層にあると呼ぶ。
【0063】
図10の例では、クエリDはクエリCよりも下階層にあり、クエリCはクエリDよりも上階層にある。また、4つのクエリA〜クエリDの中では、クエリDは最下階層に位置しており、クエリAは最上階層に位置している。本実施の形態におけるネスト関係特定ステップは、クエリ間の参照関係について、このような上階層又は下階層の位置関係も特定するものである。
【0064】
[タイプ決定ステップSQ202]
タイプ決定ステップSQ202は、上述したネスト関係が特定されたクエリに対して、当該ネスト関係に基づいて最下階層のクエリから順に最上階層のクエリまで、各クエリに対してSQL Serverで用いられるクエリの3タイプ(ビュー、関数、ストアドプロシージャ)に加え、「他タイプ」を含む計4タイプのいずれとするかを決定するものである。
上述したように、タイプ決定ステップSQ202は、タイプ判定ステップSQ203およびタイプ補正ステップSQ204を備えている。
各ステップの動作の概要としては、まず、タイプ判定ステップは各クエリを最下階層から順に上記4タイプのいずれとするかを判定し、全てのクエリの判定が終了すると、タイプ補正ステップにより当該判定された各クエリに対して必要に応じて各クエリのタイプが補正される。これにより、最終的に全てのクエリのタイプが決定する。以下、フローチャートを用いて具体的に説明する。
【0065】
[タイプ判定ステップSQ203]
図11は、図9に示すタイプ判定ステップSQ203の詳細のフローチャートである。
図11に示されるように、タイプ判定ステップSQ203は、まず、対象となっているクエリが前述したアクションクエリであるか否かを判定する(SQ401)。
対象となっているクエリがアクションクエリであると判定した場合には、当該クエリを「ストアドプロシージャ」として判定する(SQ402)。
【0066】
アクションクエリでない場合、ORDER BY句を含むものかどうかを判定する(SQ403)。
OREDER BY句が含まれている場合は、当該クエリを「他タイプ」として判定する(SQ404)。
ORDER BY句が含まれていない場合、当該クエリにパラメータが含まれているかどうかを判定する(SQ405)。ここで、パラメータとは、具体的には、PARAMETER文を含むものや、Accessオブジェクトへの値参照を含むものや、直接入力パラメータを含むものを指す。
パラメータが含まれていない場合、当該クエリが子クエリを持たないか又は子クエリが「ビュー」のみかを判定し(SQ406)、該当する場合は当該クエリを「ビュー」として判定し(SQ407)、該当しない場合は、当該クエリを「他タイプ」として判定する(SQ408)。
【0067】
一方、パラメータが含まれている場合(SQ405で「Yes」)、当該クエリがフォームで参照されているかどうかを判定する(SQ409)。参照されている場合は、当該クエリを「他タイプ」として判定する(SQ408)。参照されていない場合は、更に、当該クエリに子クエリを持たないか又は子クエリが「ビュー」のみかを判定し(SQ410)、該当する場合は「関数」として判定する(SQ411)。該当しない場合は当該クエリを「他タイプ」として判定する(SQ408)。このようにして、最下階層のクエリから順に各クエリのタイプを判定し(SQ411)する。そして、全てのクエリについての判定が完了した後(SQ416)にタイプ補正ステップSQ204へと進む。
【0068】
[タイプ補正ステップSQ204]
タイプ補正ステップSQ204は、上記タイプ判定ステップSQ203において判定された各クエリに対して、タイプの補正が必要なクエリに対しては適切なタイプに補正をするものである。
なお、タイプ補正ステップSQ204についても、タイプ判定ステップSQ203と同様に最下階層のクエリから順に行われるものである。
【0069】
具体的には、図12に示されるように、対象となるクエリのWHERE句又はHAVING句に暗黙パラメータがあるかどうかを判別する(SQ501)。ここで、暗黙パラメータとは、入力ボックスを表示することによりユーザに対してパラメータの入力を促す処理が含まれているものを指す。
当該クエリに暗黙パラメータが含まれている場合、当該クエリのタイプを「他タイプ」に補正し(SQ502)、当該クエリに暗黙パラメータが含まれていない場合、当該クエリのタイプは保持、即ち、上記のタイプ判定ステップで判定されたタイプを変更せずそのまま保持させる(SQ503)。
このようにして、全てのクエリに対して処理を行ったことを確認すると(SQ504)、再び最下階層のクエリから順番にパラメータを持つ子クエリがあるかどうかを判別する(SQ505)。
パラメータを持つ子クエリがない場合、当該クエリのタイプはそのまま保持される(SQ506)。一方、暗黙パラメータが発見されたことにより「他タイプ」に補正されたクエリがあった場合、それより上階層のクエリの全ては、パラメータを持つ子クエリを有することとなり、「他タイプ」に補正される(SQ507)。
このようにして全てのクエリの補正が完了すると(SQ508)タイプ補正ステップSQ204は終了する。
【0070】
上記タイプ決定ステップSQ202の処理を、図13、図14および図15に示されるような4つのクエリからなるAccessのクエリを例にして説明する。
なお、図においては、クエリのタイプが既に記載されているが、実際にはタイプ決定ステップによって最下階層のクエリ(クエリD)からタイプが決定される。
図13の例を説明すると、図11に示される手順に従って、最下階層のクエリDのタイプが判定される。
ここで、クエリDは、アクションクエリ(SQ401)を含まず、ORDER BY句(SQ403)も含まず、パラメータ(SQ405)も含まないものとする。更に、クエリDは最下階層であるため子クエリ(SQ406)はない。従って、この場合、クエリDは「ビュー」と判定される(SQ407)。
【0071】
次に、タイプ判定ステップSQ203は、クエリCについてタイプを判定する。クエリCもクエリDと同様に、アクションクエリ(SQ401)を含まず、ORDER BY句(SQ403)も含まず、パラメータ(SQ405)も含まないものとする。また、クエリCの子クエリであるクエリDは「ビュー」(SQ406)である。従って、クエリCも「ビュー」と判定される(SQ407)。
クエリB、クエリAもクエリCと同様にアクションクエリ(SQ401)を含まず、ORDER BY句(SQ403)も含まず、パラメータ(SQ405)も含まないものとし、また、各クエリの子クエリは「ビュー」(SQ406)と判定されているので、それぞれのタイプは「ビュー」と判定される。
このようにして、クエリA〜クエリDまで順にタイプが判定される。
【0072】
次に、タイプ補正ステップSQ204に進み、クエリDからクエリAまで順に図12に示される手順に従って処理が実行される。
今回の場合、全てのクエリにも暗黙パラメータがないとすると(SQ501)、全てのクエリのタイプは「ビュー」のまま保持される(SQ503、504、505、507、508)。
次に、例えば、図14に示されるように、クエリDは「ビュー」と判定され、クエリCの判定段階において、クエリCが、アクションクエリを含まず(SQ401)、ORDER BY句も含まないが、パラメータを有する(SQ405)ものであって、フォームで参照(SQ409)されていないとする。
【0073】
また、クエリCの子クエリであるクエリDは「ビュー」である(SQ410)ため、クエリCは「関数」として判定されることとなる(SQ411)。
続いて、クエリBは、アクションクエリ(SQ401)を含まず、ORDER BY句(SQ403)も含まず、パラメータ(SQ405)も含まないものであるが、子クエリであるクエリCがパラメータを含んでいるものであるため(SQ406)、「他タイプ」として判定される(SQ408)。
同様に、クエリAについても、アクションクエリ(SQ401)を含まず、ORDER BY句(SQ403)も含まず、パラメータ(SQ405)も含まないものであるが、子クエリであるクエリCがパラメータを含んでいるものであるため(SQ406)、「他タイプ」として判定される(SQ408)。
【0074】
次に、タイプ補正ステップSQ204に進み、クエリDからクエリAへと順に図12に示される手順に従って処理が実行される。
今回の場合、全てのクエリにも暗黙パラメータがないとすると(SQ501)、クエリC及びクエリDについては、クエリのタイプはそのまま保持され(SQ503、504、505、507、508)、クエリA及びクエリBについては、子クエリであるクエリCがパラメータを持つので、処理上は「他タイプ」に補正される(SQ506)。
なお、クエリA及びクエリBは元々「他タイプ」と判定されているため、タイプには変更はない。
【0075】
次に、暗黙パラメータが含まれ他クエリを有する一連のクエリのタイプ決定について説明する。
図15に示されるように、タイプ判定ステップSQ203においては、全てのクエリについて「ビュー」と判定された後、タイプ補正ステップSQ204でクエリCが対象となっている段階を例にする。この例では、図12に示されるように、クエリCは、暗黙パラメータを有するため(SQ501)、タイプを「ビュー」から「他タイプ」に補正される(SQ502)。
【0076】
クエリA及びクエリBについては暗黙パラメータはないとすると、これらのタイプは「ビュー」のまま保持される(SQ503)。
しかし、クエリCにパラメータが含まれていたため、クエリA及びクエリBは、パラメータを持つ子クエリを有することとなったため(SQ505)、「他タイプ」へと補正される(SQ507)こととなる。なお、図14の例から理解されるように、「関数」又は「ストアド」と判定されたクエリよりも上階層のクエリについては、アクションクエリを含むクエリ以外については、図11において必然的に、SQ403で「Yes」、SQ406で「No」、SQ409で「Yes」、又はSQ410で「No」のいずれかとなるため、すべては「他タイプ」として判定される。
従って、タイプ判定ステップSQ203によって、最初に「関数」又は「ストアド」と判定されたクエリよりも上階層であって、アクションクエリでないことが判定された段階で「他タイプ」として判定することとしてもよい。
【0077】
[呼び出し方法決定ステップSQ205]
呼び出し方法決定ステップSQ205によって、4つクエリのタイプに変換されたAccessのクエリのすべてについて、子クエリとして呼び出される場合の呼び出し方法が決定される。
図16に示されるように、呼び出し方法決定ステップSQ205は、各クエリに対して、アクションクエリを含むかどうか判別し(SQ901)、アクションクエリを含む場合はなにもしない(SQ902)。アクションクエリを含まない場合、タイプが「ビュー」であるかどうか判別する(SQ903)。
「ビュー」である場合、オリジナルクエリ名、即ちAccessで用いられていたものと同一のクエリ名で当該クエリを呼び出すことする(SQ904)。
タイプが「ビュー」でない場合であって、タイプが「関数」である場合は(SQ905)、オリジナルクエリ名で及びパラメータの形式で呼び出す(SQ906)。
更に、タイプが「関数」でない場合であって、パラメータがある場合(SQ907)は、オリジナルクエリ名とは別のクエリ名及びパラメータの形式で呼び出す(SQ908)。
また、パラメータがない場合は、オリジナルクエリ名とは別のクエリ名のみで呼び出すこととする(SQ909)。このようにして、各クエリが子クエリとして呼び出される際の呼び出し方法(呼び出し名)が決定される。
【0078】
[SQL文生成ステップSQ206]
Accessで用いられていたAccess用SQL文に基づいて、適切なSQL Server用SQLを生成するSQL文生成ステップSQ206について説明する。
SQL文生成ステップSQ206は、適切なSQL Server用SQLを生成する際に、対象となるクエリの記述に子クエリを呼び出すための記述(呼び出し方法)が含まれていた場合、必要に応じて上述した呼び出し方法決定ステップSQ205によって決定された呼び出し方法で当該記述を置換する。
【0079】
図17に示されるように、SQL文生成ステップSQ206は、対象クエリのAccessSQLをSQLServer用SQLに変換する(SQ1001)。
ここで、対象となるクエリが子クエリを有するか判断し(SQ1002)、子クエリを有する場合、各子クエリに対して、変換されたSQL文の置換処理を開始する(SQ1003)。
ここで、子クエリが「ビュー」であるか否かを判別し(SQ1004)、「ビュー」であった場合、置換処理は何も行わず次のクエリの判別に進む(SQ1005)。
一方、対象となっているクエリの子クエリが「ビュー」以外であった場合、生成したSQL文内の当該子クエリ名の記述を当該子クエリのタイプに応じて上述した呼び出し方法決定ステップSQ205で決定した呼び出し方法に従って置換する。(SQ1006)このようにして、全ての子クエリにいて適切な置換処理が完了すると、SQL文生成ステップSQ206は終了する。
【0080】
[クエリ生成ステップSQ207]
クエリ生成ステップSQ207は、上述したSQL分生成ステップSQ206よって生成したSQL文を用いて、SQL Severで使用可能なクエリを生成する。図17に示されるように、クエリ生成ステップSQ207は、対象とするクエリがアクションクエリを含むかどうか判別する(SQ1101)。
アクションクエリを含む場合は、オリジナルクエリ名でストアドプロシージャ(アクションクエリ)を生成する(SQ1102)。
アクションクエリを含まない場合、タイプが「ビュー」であるかどうかを判別し(SQ1103)、タイプが「ビュー」である場合はオリジナルクエリ名でビューを生成する(SQ1104)。
タイプが「ビュー」でない場合、タイプが「関数」であるかどうか判別し(SQ1105)、「関数」である場合は、オリジナルクエリ名に関数を生成する。
一方、「関数」でない場合は、オリジナルクエリ名にてストアドプロシージャを生成すると共に(SQ1107)、別名関数名にてインラインテーブル関数を生成する(SQ1108)
【0081】
以上説明したように、本実施形態によれば、移行先のデータベースシステムが機能することを確保しつつ移行時におけるクエリタイプの判断処理を簡略化して処理コストをできるだけ抑えることができる。
上述したように、ストアドプロシージャあるいは他タイプと判定されたクエリについては、親クエリが実際あるかどうかに係わらず、親クエリがある場合でも問題ないように、全ての場合において、同じ機能のストアドプロシージャタイプの変換後クエリの他に、関数タイプの変換後クエリを生成する。これにより、無駄なクエリは多くなるが、変換後のアプリケーションの拡張を想定した際、関数を手作業で生成するという非常にコストのかかる作業を大幅に軽減できる。
実際にツール開発の現場では、本実施形態の変換装置を用いたシステムにより、大幅な作業軽減が図れている。アップサイジングという総合的なアプリケーション変換(データの移行だけではなく機能性の移行)を行う際、どうしてもクエリの変換だけでは実現できない機能がある場合がある。その際には、既存のクエリを使用して新たなクエリを生成するが、ここでネスト可能な関数が生成済みかどうかで大きく作業コストを低減できる。
【0082】
なお、図8に示す変換検証装置117の機能は、例えば、処理回路がプログラムを実行することで実現してもよい。また、この場合に、当該処理回路が実行するプログラム、当該処理回路の処理に用いられるデータを一時的に記憶するメモリが用いられる。変換検証装置117の処理は、当該プログラムに記述されている。
【0083】
本発明は上述した実施形態には限定されない。
すなわち、当業者は、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、コンビネーション、サブコンビネーション、並びに代替を行ってもよい。
例えば上述した実施形態では、移行元の関係データベースシステム(第1のデータベースシステム)がマイロソフト社のAccessであり、移行先のデータベースシステム(第2のデータベースシステム)が同じくマイクロソフト社のSQL Serverである場合を例にして、本実施形態のデータ変換装置を説明した。
本発明の上述した請求項1等の記載した機能を持つものあれば移行先および移行元のデータベースシステムは特に限定されない。
【符号の説明】
【0084】
11…ネスト関係特定部
12…タイプ決定部
13…呼び出し方法決定部
14…SQL文生成部
15…クエリ生成部
101…データシステム
111…Accessデータベースシステム
113…SQL−SERVERデータベースシステム
115…変換装置
117…変換検証装置

【特許請求の範囲】
【請求項1】
第1のデータベースシステムで処理される第1のプログラム内に記述された前記第1のデータベースシステムへの問い合わせ命令であるクエリを記述したSQL文データを、第2のデータベースで処理される第2のプログラム内の同じ機能のクエリを記述したSQL文データに変換した場合の前記変換を検証する変換検証方法であって、
前記第1のプログラムに、当該第1のプログラム内のテーブルデータに対して操作を行う第1のSQL文データを取得する取得操作コードを挿入する第1の工程と、
前記第1のプログラムの実行過程で前記取得操作コードによって取得された前記第1のSQL文データを、前記第2のデータベースの第2のSQL文データに変換した結果を取得する第2の工程と、
前記第1のSQL文データを前記第1のデータシステムで実行し、前記第2のSQL文データを前記第2のデータベースシステムで実行する第3の工程と、
前記第3の工程における前記第1のSQL文データの処理に応じて取得したデータと、前記第2のSQL文データの処理に応じて取得したデータとを比較する第4の工程と
をコンピュータが実行する変換検証方法。
【請求項2】
前記第3の工程は、前記第1のSQL文データおよび前記第2のSQL文データが前記テーブルデータに対する操作結果を取得するためのものではない場合に、前記第1のSQL文データおよび前記第2のSQL文データを前記操作結果あるいは操作過程のデータを取得するSQL文データに変換し、当該変換したSQL文データを実行する
請求項1に記載の変換検証方法。
【請求項3】
前記第3の工程は、前記第1のSQL文データの実行に応じて取得した第1のデータを予め決められた実行結果テーブルデータ内の所定の箇所に順次格納し、前記第2のSQL文データの実行に応じて取得した第2のデータを前記実行結果テーブルデータ内の所定の箇所に順次格納し、
前記第4の工程は、前記実行結果テーブルデータ内の前記第1のデータと前記第2のデータとを比較する
請求項2に記載の変換検証方法。
【請求項4】
前記第1の工程は、前記第1のSQL文データの実行命令文データと、その後にある前記第1のSQL文データの先頭文字列とを検出すると、前記実行命令文データの一つ上の行に前記取得操作コードを挿入する
請求項3に記載の変換検証方法。
【請求項5】
前記第4の工程の比較でデータの不一致を生じた前記第1のSQL文データおよび前記第2のSQL文データを所定のデータ処理装置に送信する第5の工程
を前記コンピュータがさらに実行する請求項4に記載の変換検証方法。
【請求項6】
前記第1のプログラムは複数の第1クエリを有し、前記第2のプログラムは複数の第2クエリを有し、
前記第1クエリは、パラメータ、データベースの値の追加・削除・更新処理、他のクエリの子クエリとなることの全てを許可しており、
第2クエリのタイプとして、
パラメータを禁止し、前記追加・削除・更新処理を許可し、他のクエリの子クエリとなることを許容するビュータイプと、
パラメータを許可し、前記追加・削除・更新処理を禁止し、他のクエリの子クエリとなることを許容する関数タイプと、
パラメータを許可し、前記追加・削除・更新処理を許可し、他のクエリの子クエリとなることを禁止するストアドプロシージャタイプが規定されている場合に、
前記第2の工程は、
変換装置のメモリから前記第1のデータベースシステムの複数の前記第1のクエリをメモリから読み出す読み出しステップと、
前記読み出した複数の第1クエリのネスト構造に基づいて、前記複数の第1のクエリの親子関係を特定するネスト関係特定ステップと、
前記親子関係に基づいて子クリエから親クエリに向けて、最下階層の前記第1クエリから最上階層の前記第1クエリまで順番に、前記第1クエリの夫々に対応する前記第2クエリのタイプを決定するタイプ決定ステップと、
前記親子関係に基づいて子クリエから親クエリに向けて、最下階層の前記第1クエリから最上階層の前記第1クエリまで順番に、前記決定されたタイプに従って前記第1クエリに対応する前記第2クエリを生成するクエリ生成ステップと
を前記変換装置の処理回路が実行し、
前記タイプ決定ステップは、
前記移行の処理過程でのみ使用される前記関数タイプ、ストアドプロシージャタイプ以外のタイプである予め規定された他タイプを用いて、
前記ネスト構造の親子関係を基に前記第1クエリの子クエリが、前記関数タイプ、ストアドプロシージャタイプあるいは前記他タイプである場合に、当該第1クエリに対応した前記第2のクリエを前記他タイプと判定する処理と、
前記第1クエリがアクションクエリではなく、パラメータを含まず、且つ、子クエリが無いまたは子クエリがビュータイプであると判定された場合に、当該第1クエリに対応する前記第2クエリはビュータイプであると判定する処理と
を前記処理回路が実行し、
前記クエリ生成ステップは、
前記タイプ決定ステップにおいて前記他タイプあるいは前記ストアドプロシージャタイプと判定された第2クエリである対象クエリについては、
当該対象クエリの機能記述と同等の機能記述を含むストアドプロシージャタイプの前記第2クエリを生成すると共に、
当該対象クエリの機能記述と同等の機能記述を含む関数タイプの前記第2クエリを生成する処理を前記処理回路が実行する
請求項1〜5のいずれかに記載の変換検証方法。
【請求項7】
第1のデータベースシステムで処理される第1のプログラム内に記述された前記第1のデータベースシステムへの問い合わせ命令であるクエリを記述したSQL文データを、第2のデータベースで処理される第2のプログラム内の同じ機能のクエリを記述したSQL文データに変換した場合の前記変換を検証する変換検証装置であって、
前記第1のプログラムに、当該第1のプログラム内のテーブルデータに対して操作を行う第1のSQL文データを取得する取得操作コードを挿入する挿入手段程と、
前記第1のプログラムの実行過程で前記取得操作コードによって取得された前記第1のSQL文データを、前記第2のデータベースの第2のSQL文データに変換した結果を取得する変換結果取得手段程と、
前記第1のSQL文データを前記第1のデータシステムで実行し、前記第2のSQL文データを前記第2のデータベースシステムで実行するSQL実行手段と、
前記SQL実行手段における前記第1のSQL文データの処理に応じて取得したデータと、前記第2のSQL文データの処理に応じて取得したデータとを比較する比較手段と
を有する変換検証装置。
【請求項8】
第1のデータベースシステムで処理される第1のプログラム内に記述された前記第1のデータベースシステムへの問い合わせ命令であるクエリを記述したSQL文データを、第2のデータベースで処理される第2のプログラム内の同じ機能のクエリを記述したSQL文データに変換した場合の前記変換を検証するコンピュータが実行するプログラムでって、
前記第1のプログラムに、当該第1のプログラム内のテーブルデータに対して操作を行う第1のSQL文データを取得する取得操作コードを挿入する第1の工程と、
前記第1のプログラムの実行過程で前記取得操作コードによって取得された前記第1のSQL文データを、前記第2のデータベースの第2のSQL文データに変換した結果を取得する第2の工程と、
前記第1のSQL文データを前記第1のデータシステムで実行し、前記第2のSQL文データを前記第2のデータベースシステムで実行する第3の工程と、
前記第3の工程における前記第1のSQL文データの処理に応じて取得したデータと、前記第2のSQL文データの処理に応じて取得したデータとを比較する第4の工程と
を前記コンピュータに実行させるプログラム。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2011−258002(P2011−258002A)
【公開日】平成23年12月22日(2011.12.22)
【国際特許分類】
【出願番号】特願2010−132139(P2010−132139)
【出願日】平成22年6月9日(2010.6.9)
【出願人】(507302922)株式会社インフォース (4)
【Fターム(参考)】