IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社インフォースの特許一覧

特許7484033データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置
<>
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図1
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図2
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図3
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図4
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図5
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図6
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図7
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図8
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図9
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図10
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図11
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図12
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図13
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図14
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図15
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図16
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図17
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図18
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図19
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図20
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図21
  • 特許-データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-05-08
(45)【発行日】2024-05-16
(54)【発明の名称】データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置
(51)【国際特許分類】
   G06F 8/51 20180101AFI20240509BHJP
   G06F 16/27 20190101ALI20240509BHJP
   G06F 8/76 20180101ALN20240509BHJP
【FI】
G06F8/51
G06F16/27
G06F8/76
【請求項の数】 14
(21)【出願番号】P 2023183515
(22)【出願日】2023-10-25
【審査請求日】2024-01-11
【早期審査対象出願】
(73)【特許権者】
【識別番号】507302922
【氏名又は名称】株式会社インフォース
(74)【代理人】
【識別番号】100108006
【弁理士】
【氏名又は名称】松下 昌弘
(72)【発明者】
【氏名】▲柳▼田 章一郎
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2005-78636(JP,A)
【文献】中国特許出願公開第114064118(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/51
G06F 16/27
G06F 8/76
(57)【特許請求の範囲】
【請求項1】
データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する方法であって、
前記第1管理システムが管理するデータベースを第1データベースと呼び、
前記第2管理システムが管理するデータベースを第2データベースと呼び、
前記第1管理システムが前記第1データベースを操作するために実行するSQL文を第1SQL文と呼び、
前記第2管理システムが前記第2データベースを操作するために実行するSQL文を第2SQL文と呼び、
情報処理装置が、前記第1データベースに対応した前記第2データベースを作成するデータベース作成工程と、
前記情報処理装置が、前記第1データベースについて作成された1以上の前記第1SQL文を解析し、当該解析の結果に基づいて、1以上の前記第1SQL文による前記第1データベースの操作に対応した前記第2データベースの操作を前記第2管理システムに行わせる1以上の前記第2SQL文を作成するSQL文作成工程とを有し、
前記SQL文作成工程は、
前記第1SQL文において用いられるパラメータであって、ユーザにより入力され得る1以上の前記パラメータを特定することと、
前記第1SQL文による前記第1データベースの操作に対応した前記第2データベースの操作を行わせる前記第2SQL文として、特定された1以上の前記パラメータを用いる前記第2SQL文を作成することと、
前記ユーザが操作する端末装置において実行されるモジュールであって、前記第1SQL文について特定された1以上の前記パラメータを入力するためのユーザインターフェースをそれぞれ提供する1以上の第1プログラムコードと、前記第2管理システムが、当該第1SQL文について作成した前記第2SQL文を、前記ユーザインターフェースによって入力される1以上の前記パラメータを用いて実行するように指示する第2プログラムコードとを含んだ前記モジュールを作成することとを有する、
方法。
【請求項2】
前記第1管理システムは、前記第1SQL文において用いられる1以上の前記パラメータに関するパラメータ情報を保存しており、
前記パラメータが用いられた前記第1SQL文を構成する複数のトークンは、前記パラメータを表す前記トークンであるパラメータトークンを含んでおり、
前記パラメータには、前記パラメータの入力方法が異なる複数のタイプが存在し、
各前記タイプは、前記パラメータトークンと他の前記トークンとの関係、及び/又は、前記パラメータトークンに含まれる文字列に基づいて識別可能であり、
前記SQL文作成工程において一の前記第1SQL文に用いられる前記パラメータを特定することは、
当該一の第1SQL文について保存された前記パラメータ情報を取得することと、
当該一の第1SQL文を構成する複数の前記トークンから、前記パラメータ情報が示す1以上の前記パラメータを表す1以上の前記パラメータトークンを特定することと、
特定された1以上の前記パラメータトークンの各々について、前記パラメータトークンと他の前記トークンとの関係、及び/又は、前記パラメータトークンに含まれる文字列に基づいて、前記タイプを判別することとを含み、
前記SQL文作成工程において一の前記第1SQL文について作成される一の前記第1プログラムコードは、当該一の第1SQL文に用いられる一の前記パラメータを入力するための前記ユーザインターフェースであって、当該一のパラメータについて判別された前記タイプにおける前記入力方法に適合した前記ユーザインターフェースを提供する、
請求項1に記載の方法。
【請求項3】
前記第1SQL文に従って前記第1管理システムの画面に表示される入力用オブジェクトにより入力される前記パラメータの前記タイプを第1タイプと呼び、
前記第1タイプの前記パラメータを入力するための前記ユーザインターフェースを提供する前記第1プログラムコードによる処理は、
前記入力用オブジェクトを前記端末装置の画面に表示させることと、
前記入力用オブジェクトにおいて入力されたデータを当該第1タイプのパラメータとして取得することとを含む、
請求項2に記載の方法。
【請求項4】
前記第1管理システムの画面に表示される所定のオブジェクトにおいて入力若しくは提示されるデータに基づいて前記パラメータが取得される前記タイプを第2タイプと呼び、
前記端末装置の画面に前記所定のオブジェクトを表示させる場合に実行されるモジュールをオブジェクト用モジュールと呼び、
前記第2タイプの前記パラメータを入力するための前記ユーザインターフェースを提供する前記第1プログラムコードによる処理は、
前記オブジェクト用モジュールによって前記端末装置の画面に表示される前記所定のオブジェクトにおいて入力若しくは提示されるデータに基づいて、当該第2タイプのパラメータを取得することができるか判定することと、
当該第2タイプのパラメータを取得できないと判定した場合、当該第2タイプのパラメータを入力するための入力用オブジェクトを前記端末装置の画面に表示させることと、
前記入力用オブジェクトにおいて入力されたデータを当該第2タイプのパラメータとして取得することとを含む、
請求項2に記載の方法。
【請求項5】
前記第1データベースに変更を加える前記第1SQL文を作用型のSQL文と呼び、
前記作用型のSQL文について作成された前記第2SQL文を実行するように指示する前記第2プログラムコードによる処理は、
前記第2管理システムにおいて前記第2SQL文を仮実行させ、当該仮実行によってロールバック可能に変更された前記第2データベースのデータに関する仮実行情報を取得することと、
取得した前記仮実行情報を提示するとともに、前記第2SQL文による前記第2データベースのデータの変更を確定するか前記ユーザに確認を求める確認用オブジェクトを前記端末装置の画面に表示させることと、
前記第2SQL文による前記第2データベースの変更を確定する指示が前記確認用オブジェクトに入力された場合、前記第2管理システムにおいて当該仮実行による前記第2データベースのデータの変更を確定させることとを含む、
請求項1に記載の方法。
【請求項6】
前記第1データベースに含まれるテーブルを第1テーブルと呼び、
前記第2データベースに含まれるテーブルを第2テーブルと呼び、
前記第1データベースに変更を加える前記第1SQL文を作用型のSQL文と呼び、
前記SQL文作成工程は、
前記第1SQL文が前記作用型のSQL文である場合、当該作用型のSQL文において操作対象となっている前記第1テーブルを特定することと、
前記作用型のSQL文の操作対象として複数の前記第1テーブルが特定された場合、当該作用型のSQL文による前記第1データベースの変更に対応した前記第2データベースの変更を行わせる前記第2SQL文として、特定された複数の前記第1テーブルに対応する複数の前記第2テーブルに対して個別に変更を加える前記第2SQL文を作成することとを含む、
請求項1に記載の方法。
【請求項7】
前記第1データベースに含まれるテーブルを第1テーブルと呼び、
前記第2データベースに含まれるテーブルを第2テーブルと呼び、
前記第1テーブルにおけるフィールドを第1フィールドと呼び、
前記第2テーブルにおけるフィールドを第2フィールドと呼び、
前記第1SQL文において前記第1フィールド又は前記第1フィールドを含む計算式を表す部分を第1フィールド部と呼び、
前記第2SQL文において前記第2フィールド又は前記第2フィールドを含む計算式を表す部分を第2フィールド部と呼び、
前記第1管理システムは、前記第1SQL文における1以上の前記第1フィールド部に関するフィールド情報を保存しており、
一の前記第1SQL文について一の前記第2SQL文を作成する前記SQL文作成工程は、
当該一の第1SQL文について保存された前記フィールド情報を取得することと、
当該一の第1SQL文における1以上の前記第1フィールド部のうち、別名が指定されていない前記第1フィールド部を特定することと、
特定した前記第1フィールド部の名称を前記フィールド情報から取得することと、
当該一の第2SQL文において、特定した前記第1フィールド部に対応する前記第2フィールド部の別名として、前記フィールド情報から取得した前記名称を指定することとを含む、
請求項1に記載の方法。
【請求項8】
前記SQL文作成工程は、
前記第1SQL文における所定の関数又は所定の構文を、前記第2SQL文において別の関数又は別の構文に置き換えることと、
前記所定の関数又は前記所定の構文に渡される引数である第1引数のデータ型が数値の場合において、前記別の関数又は前記別の構文に渡される引数である第2引数のデータ型が真又は偽の値をとるデータ型ならば、前記第1引数がゼロのときに偽の値をとり、前記第1引数がゼロ以外のときに真の値をとる真偽式を前記第2引数として設定することとを含む、
請求項1に記載の方法。
【請求項9】
前記第1データベースに含まれるテーブルを第1テーブルと呼び、
前記第2データベースに含まれるテーブルを第2テーブルと呼び、
前記第1テーブルにおけるフィールドを第1フィールドと呼び、
前記第2テーブルにおけるフィールドを第2フィールドと呼び、
前記第1SQL文において前記第1フィールド又は前記第1フィールドを含む計算式を表す部分を第1フィールド部と呼び、
前記第2SQL文において前記第2フィールド又は前記第2フィールドを含む計算式を表す部分を第2フィールド部と呼び、
前記第1管理システムは、前記第1SQL文における1以上の前記第1フィールド部に関するフィールド情報を保存しており、
一の前記第1SQL文について一の前記第2SQL文を作成する前記SQL文作成工程は、
当該一の第1SQL文において、前記第1フィールド部に関わる操作を表す所定の第1構文を特定することと、
特定した前記第1構文を含むテスト用の前記第1SQL文を作成して前記第1管理システムに処理させ、当該テスト用の第1SQL文について前記第1管理システムが生成したテスト用の前記フィールド情報を取得することと、
当該一の第2SQL文において、特定した前記第1構文に対応する第2構文を作成する場合、前記第2構文に含まれるべき前記第2フィールド部の名称を、前記テスト用のフィールド情報に基づいて設定することとを含む、
請求項1に記載の方法。
【請求項10】
一の前記第1SQL文について一の前記第2SQL文を作成する前記SQL文作成工程は、
当該一の第1SQL文において、別名が指定されていないサブクエリである第1サブクエリを特定することと、
当該一の第1SQL文において使用される前記第1データベースのテーブルの名称、及び、当該一の第1SQL文において使用される他の前記サブクエリの名称を使用済み名称として取得することと、
当該一の第2SQL文において、前記第1サブクエリに対応する第2サブクエリを作成する場合、前記使用済み名称と重複しない別名を当該第2サブクエリに設定することとを含む、
請求項1に記載の方法。
【請求項11】
前記第1データベースに含まれるテーブルを第1テーブルと呼び、
前記第2データベースに含まれるテーブルを第2テーブルと呼び、
前記第1テーブルにおけるフィールドを第1フィールドと呼び、
前記第2テーブルにおけるフィールドを第2フィールドと呼び、
前記第1SQL文において前記第1フィールド又は前記第1フィールドを含む計算式を表す部分を第1フィールド部と呼び、
前記第2SQL文において前記第2フィールド又は前記第2フィールドを含む計算式を表す部分を第2フィールド部と呼び、
前記第1SQL文において前記第1フィールド部に関わるデータ抽出操作を表す構文を第1フィールド抽出構文と呼び、
前記第2SQL文において前記第2フィールド部に関わるデータ抽出操作を表す構文を第2フィールド抽出構文と呼び、
一の前記第1SQL文について一の前記第2SQL文を作成する前記SQL文作成工程は、
当該一の第1SQL文において、複数の前記第1フィールド部に関わるデータ抽出操作を表す前記第1フィールド抽出構文を特定することと、
特定した前記第1フィールド抽出構文に含まれる複数の前記第1フィールド部と、前記第1フィールド部について指定された別名とを含むフィールドリストを取得することと、
前記フィールドリストに含まれる複数の前記第1フィールド部において、前記フィールドリストに含まれる前記別名と同一の文字列が含まれた前記第1フィールド部を特定することと、
当該一の第2SQL文において、特定した前記第1フィールド抽出構文に対応する前記第2フィールド抽出構文を作成する場合、特定した前記第1フィールド部に含まれる前記別名と同一の文字列が、当該別名に対応する前記第1フィールド部を含んだ文字列へ置き換えられることにより得られる一連の文字列を、特定した前記第1フィールド部に対応する前記第2フィールド部として設定することとを含む、
請求項1に記載の方法。
【請求項12】
前記第1データベースに含まれるテーブルを第1テーブルと呼び、
前記第2データベースに含まれるテーブルを第2テーブルと呼び、
前記第1テーブルにおけるフィールドを第1フィールドと呼び、
前記第2テーブルにおけるフィールドを第2フィールドと呼び、
前記第1SQL文において前記第1フィールド又は前記第1フィールドを含む計算式を表す部分を第1フィールド部と呼び、
前記第2SQL文において前記第2フィールド又は前記第2フィールドを含む計算式を表す部分を第2フィールド部と呼び、
前記第1SQL文において前記第1フィールド部に関わるデータ抽出操作を表す構文を第1フィールド抽出構文と呼び、
前記第2SQL文において前記第2フィールド部に関わるデータ抽出操作を表す構文を第2フィールド抽出構文と呼び、
一の前記第1SQL文について一の前記第2SQL文を作成する前記SQL文作成工程は、
当該一の第1SQL文において前記第1フィールド抽出構文を特定することと、
特定した前記第1フィールド抽出構文において、データ抽出結果におけるデータの並び順を指定する並び順指定句が含まれる場合、特定した前記第1フィールド抽出構文に対応する前記第2フィールド抽出構文において、前記並び順指定句に加えて、データ抽出結果におけるデータ数を指定するデータ数指定句が含まれるように当該第2フィールド抽出構文を作成することとを含む、
請求項1に記載の方法。
【請求項13】
データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する処理を情報処理装置に行わせる命令を含んだプログラムであって、
前記情報処理装置が前記命令に従って行う処理は、請求項1~請求項12のいずれか一項に記載された方法の各工程を含む、
プログラム。
【請求項14】
データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する処理を行う情報処理装置であって、
処理部と、
前記処理部に実行される命令を記憶した記憶部とを有し、
前記処理部が前記命令に従って行う処理は、請求項1~請求項12のいずれか一項に記載された方法の各工程を含む、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースの管理を行うシステムを変更する方法、プログラム及び情報処理装置に関するものである。
【背景技術】
【0002】
データベース管理システム(database management system:DBMS)には様々な種類があり、データベースの規模や利用状況などに応じて適切なDBMSが選択される。例えば米国マイクロソフト社のACCESS(登録商標)は、プログラミングのスキルを持たない初心者でも簡単に業務用のデータベースを構築することが可能なため、比較的小規模の事業者向けのDBMSとして広く利用されている。一方、事業規模が拡大するにつれてより規模の大きいデータベースが必要になったり、多人数での同時実行制御が必要になったりすると、ACCESSなどの小規模事業者向けのDBMSではこれらの要求に応えられなくなる。そのような場合に、既存のデータベースのDBMSを別のDBMSへ変更する技術が知られている。下記の引用文献には、移行元のDBMSで用いられるクエリを移行先のDBMSのフォーマットに適合したクエリへ変換するデータ変換方法が開示されている。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2011-248507号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、ACCESSのクエリの記述に用いられるSQL(structured query language)は、初心者でも簡単にクエリを作成できるように、一般的なSQLに比べて制約の少ない平易な構文を持つ。例えばACCESSのSQLでは、SELECT句やUPDATE句の操作対象となるレコードの条件を定めるWHERE句に簡易な記述を加えるだけで、その条件に含まれるパラメータを入力ダイアログから入力させることができる。
【0005】
[商品コード]のフィールド値が入力ダイアログにより入力される値に一致することを絞り込み条件とする場合、ACCESSのSQLでは、WHERE句を次のように記述すればよい。
WHERE
商品コード = [商品コードを入力して下さい]
ここで[商品コードを入力して下さい]はパラメータであり、入力ダイアログのタイトルにはこのパラメータが表示される。
【0006】
しかしながら、例えば米国マイクロソフト社のAzure SQL Database(登録商標)など、比較的規模の大きいデータベースを扱うDBMSに用いられる一般的なSQLでは、パラメータ取得用のユーザインターフェース(入力ダイアログなど)を提供する機能がない。そのため、SQL文の記述のみでパラメータ取得用のユーザインターフェースを簡単に提供できる機能を持つDBMSの場合、そのような機能を持たないDBMSへの変更が難しいという問題がある。
【0007】
本発明はかかる事情に鑑みてなされたものであり、その目的は、SQL文の記述によりパラメータ取得用のユーザインターフェースを提供する機能を持つ既存のDBMSを、そのような機能のない別のDBMSへ変更することが可能な方法、プログラム及び情報処理装置を提供することにある。
【課題を解決するための手段】
【0008】
本発明の第1の態様は、データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する方法であって、第1管理システムが管理するデータベースを第1データベースと呼び、第2管理システムが管理するデータベースを第2データベースと呼び、第1管理システムが第1データベースを操作するために実行するSQL文を第1SQL文と呼び、第2管理システムが第2データベースを操作するために実行するSQL文を第2SQL文と呼び、情報処理装置が、第1データベースに対応した第2データベースを作成するデータベース作成工程と、情報処理装置が、第1データベースについて作成された1以上の第1SQL文を解析し、当該解析の結果に基づいて、1以上の第1SQL文による第1データベースの操作に対応した第2データベースの操作を第2管理システムに行わせる1以上の第2SQL文を作成するSQL文作成工程とを有し、SQL文作成工程は、第1SQL文において用いられるパラメータであって、ユーザにより入力され得る1以上のパラメータを特定することと、第1SQL文による第1データベースの操作に対応した第2データベースの操作を行わせる第2SQL文として、特定された1以上のパラメータを用いる第2SQL文を作成することと、ユーザが操作する端末装置において実行されるモジュールであって、第1SQL文について特定された1以上のパラメータを入力するためのユーザインターフェースをそれぞれ提供する1以上の第1プログラムコードと、第2管理システムが、当該第1SQL文について作成した第2SQL文を、ユーザインターフェースによって入力される1以上のパラメータを用いて実行するように指示する第2プログラムコードとを含んだモジュールを作成することとを有する、方法である。
【0009】
本発明の第2の態様は、データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する処理を情報処理装置に行わせる命令を含んだプログラムであって、第1管理システムが管理するデータベースを第1データベースと呼び、第2管理システムが管理するデータベースを第2データベースと呼び、第1管理システムが第1データベースを操作するために実行するSQL文を第1SQL文と呼び、第2管理システムが第2データベースを操作するために実行するSQL文を第2SQL文と呼び、情報処理装置が命令に従って行う処理は、第1データベースに対応した第2データベースを作成するデータベース作成工程と、第1データベースについて作成された1以上の第1SQL文を解析し、当該解析の結果に基づいて、1以上の第1SQL文による第1データベースの操作に対応した第2データベースの操作を第2管理システムに行わせる1以上の第2SQL文を作成するSQL文作成工程とを有し、SQL文作成工程は、第1SQL文において用いられるパラメータであって、ユーザにより入力され得る1以上のパラメータを特定することと、第1SQL文による第1データベースの操作に対応した第2データベースの操作を行わせる第2SQL文として、特定された1以上のパラメータを用いる第2SQL文を作成することと、ユーザが操作する端末装置において実行されるモジュールであって、第1SQL文について特定された1以上のパラメータを入力するためのユーザインターフェースをそれぞれ提供する1以上の第1プログラムコードと、第2管理システムが、当該第1SQL文について作成した第2SQL文を、ユーザインターフェースによって入力される1以上のパラメータを用いて実行するように指示する第2プログラムコードとを含んだモジュールを作成することとを有する、プログラムである。
【0010】
本発明の第3の態様は、データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する処理を行う情報処理装置であって、処理部と、処理部に実行される命令を記憶した記憶部とを有し、第1管理システムが管理するデータベースを第1データベースと呼び、第2管理システムが管理するデータベースを第2データベースと呼び、第1管理システムが第1データベースを操作するために実行するSQL文を第1SQL文と呼び、第2管理システムが第2データベースを操作するために実行するSQL文を第2SQL文と呼び、処理部が命令に従って行う処理は、第1データベースに対応した第2データベースを作成するデータベース作成工程と、第1データベースについて作成された1以上の第1SQL文を解析し、当該解析の結果に基づいて、1以上の第1SQL文による第1データベースの操作に対応した第2データベースの操作を第2管理システムに行わせる1以上の第2SQL文を作成するSQL文作成工程とを有し、SQL文作成工程は、第1SQL文において用いられるパラメータであって、ユーザにより入力され得る1以上のパラメータを特定することと、第1SQL文による第1データベースの操作に対応した第2データベースの操作を行わせる第2SQL文として、特定された1以上のパラメータを用いる第2SQL文を作成することと、ユーザが操作する端末装置において実行されるモジュールであって、第1SQL文について特定された1以上のパラメータを入力するためのユーザインターフェースをそれぞれ提供する1以上の第1プログラムコードと、第2管理システムが、当該第1SQL文について作成した第2SQL文を、ユーザインターフェースによって入力される1以上のパラメータを用いて実行するように指示する第2プログラムコードとを含んだモジュールを作成することとを有する、情報処理装置である。
【0011】
本発明の第4の態様は、データベースの管理を行うシステムを第1管理システムから第2管理システムへ変更する処理を行う情報処理装置であって、第1管理システムが管理するデータベースを第1データベースと呼び、第2管理システムが管理するデータベースを第2データベースと呼び、第1管理システムが第1データベースを操作するために実行するSQL文を第1SQL文と呼び、第2管理システムが第2データベースを操作するために実行するSQL文を第2SQL文と呼び、第1データベースに対応した第2データベースを作成するデータベース作成手段と、第1データベースについて作成された1以上の第1SQL文を解析し、当該解析の結果に基づいて、1以上の第1SQL文による第1データベースの操作に対応した第2データベースの操作を第2管理システムに行わせる1以上の第2SQL文を作成するSQL文作成手段とを有し、SQL文作成手段は、第1SQL文において用いられるパラメータであって、ユーザにより入力され得る1以上のパラメータを特定する手段と、第1SQL文による第1データベースの操作に対応した第2データベースの操作を行わせる第2SQL文として、特定された1以上のパラメータを用いる第2SQL文を作成する手段と、ユーザが操作する端末装置において実行されるモジュールであって、第1SQL文について特定された1以上のパラメータを入力するためのユーザインターフェースをそれぞれ提供する1以上の第1プログラムコードと、第2管理システムが、当該第1SQL文について作成した第2SQL文を、ユーザインターフェースによって入力される1以上のパラメータを用いて実行するように指示する第2プログラムコードとを含んだモジュールを作成する手段とを有する、情報処理装置である。
【発明の効果】
【0012】
本発明によれば、SQL文の記述によりパラメータ取得用のユーザインターフェースを提供する機能を持つ既存のDBMSを、そのような機能のない別のDBMSへ変更することが可能な方法、プログラム及び情報処理装置を提供できる。
【図面の簡単な説明】
【0013】
図1図1は、本実施形態に係るシステムの構成の一例を示す図である。
図2図2は、本実施形態に係る情報処理装置による処理の一例を説明するためのフローチャートである。
図3図3Aは第2SQL文を作成する処理の一例を説明するためのフローチャートであり、図3Bは第1SQL文のパラメータを特定する処理の一例を説明するためのフローチャートである。
図4図4Aは第1テーブルの構造の一例を示す図であり、図4Bは第1SQL文の一例を示す図である。図4C及び図4Dは、第1SQL文の実行により表示される入力ダイアログの一例を示す図である
図5図5A及び図5Bは、図4Bに示す第1SQL文において特定されるパラメータとそのタイプを示す図である。図5Cは、図4Bに示す第1SQL文に対応する第2SQL文の一例を示す図である。
図6図6は、パラメータを取得して第2SQL文の実行するためのモジュールの一例を示す第1の図である。
図7図7は、パラメータを取得して第2SQL文の実行するためのモジュールの一例を示す第2の図である。
図8図8は、パラメータを取得して第2SQL文の実行するためのモジュールの一例を示す第3の図である。
図9図9は、パラメータを取得して第2SQL文の実行するためのモジュールの一例を示す第4の図である。
図10図10は、端末装置において図6図9に示すモジュールを実行した場合の処理を説明するためのフローチャートである。
図11図11は、第1タイプのパラメータを入力する処理の一例を説明するためのフローチャートである。
図12図12は、第2タイプのパラメータを入力する処理の一例を説明するためのフローチャートである。
図13図13Aは第1テーブルの構造の一例を示す図であり、図13Bは第1SQL文の一例を示す図であり、図13Cは第2SQL文の一例を示す図である。
図14図14Aは第1テーブルの構造の一例を示す図であり、図14Bは第1SQL文の一例を示す図であり、図14Cは第2SQL文の一例を示す図である。
図15図15Aは第1テーブルの構造の一例を示す図であり、図15Bは第1テーブルに含まれるデータの一例を示す図であり、図15Cは第1SQL文の一例を示す図であり、図15Dは第1SQL文が示すクエリの結果の一例を示す図であり、図15Eは第2SQL文の一例を示す図である。
図16図16Aは第1テーブルの構造の一例を示す図であり、図16Bは第1テーブルに含まれるデータの一例を示す図であり、図16Cは第1SQL文の一例を示す図であり、図16Dは第1SQL文が示すクエリの結果の一例を示す図であり、図16Eは第2SQL文の一例を示す図である。
図17図17Aは第1テーブルの構造の一例を示す図であり、図17Bは第1テーブルに含まれるデータの一例を示す図であり、図17Cは第1SQL文の一例を示す図であり、図17Dは第1SQL文が示すクエリの結果の一例を示す図であり、図17Eは第2SQL文の一例を示す図である。
図18図18Aは第1テーブルの構造の一例を示す図であり、図18Bは第1テーブルに含まれるデータの一例を示す図であり、図18Cは第1SQL文の一例を示す図であり、図18Dは第1SQL文が示すクエリの結果の一例を示す図であり、図18Eは比較例のSQL文の示す図であり、図18Fは第2SQL文の一例を示す図である。
図19図19Aは第1テーブルの構造の一例を示す図であり、図19Bは第1SQL文の一例を示す図であり、図19Cは第2SQL文の一例を示す図である。
図20図20Aは第1テーブルの構造の一例を示す図であり、図20Bは第1SQL文の一例を示す図であり、図20Cは第2SQL文の一例を示す図である。
図21図21Aは第1テーブルの構造の一例を示す図であり、図21Bは第1SQL文の一例を示す図であり、図21Cは第1SQL文に含まれるフィールド部とその別名を示す図であり、図21Dは第2SQL文の一例を示す図である。
図22図22Aは第1テーブルの構造の一例を示す図であり、図22Bは第1SQL文の一例を示す図であり、図22Cは第2SQL文の一例を示す図である。
【発明を実施するための形態】
【0014】
図1は、本実施形態に係るシステムの一例を示す図である。図1に示すシステムは、インターネット等の通信ネットワーク9を介して互いに通信可能な情報処理装置1と第2管理システム3を有する。図1に示すシステムにおいて、情報処理装置1は、データベースの管理を行うシステムを既存のDBMSから別のDBMSへ変更する処理を行う。情報処理装置1は、変更元の既存のDBMSとして動作するとともに、DBMSの変更に関わる処理を行う。第2管理システム3は、変更先の別のDBMSとして動作する。DBMSの変更が行われたあと、情報処理装置1は、第2管理システム3にアクセスする端末装置としても動作する。
【0015】
[情報処理装置1]
情報処理装置1は、インストールされたプログラム(アプリケーションソフトウェアなど)によって様々な情報処理を行うパーソナルコンピュータなどの装置である。情報処理装置1は、既存のDBMS(以下「第1管理システム」と呼ぶ場合がある。)として第1データベース200の管理を行う。例えば情報処理装置1は、ACCESS(登録商標)のアプリケーションソフトウェアを実行することにより第1管理システムとして動作する。
【0016】
また情報処理装置1は、この第1データベース200と同じデータが登録された第2データベース400を第2管理システム3に作成し、第1データベース200について用意された第1管理システム用のクエリと同様のクエリを第2管理システム3の第2データベース400に対しても実行できるようにする処理(以下「DBMS変更処理」と呼ぶ場合がある。)を行う。
【0017】
更に情報処理装置1は、DBMS変更処理により作成された第2データベース400を利用するユーザの操作する端末装置として、第2管理システム3にアクセスする。この場合、情報処理装置1(端末装置)は、DBMS変更処理において作成されたSQL文のクエリの実行を第2管理システム3に指示する処理や、第2管理システム3によるクエリの実行結果を取得して表示する処理などを行う。第1管理システムがACCESSの場合、情報処理装置1(端末装置)は、ACCESSの一部の機能(フォーム、レポート、マクロ、モジュールなど)を利用することにより第2管理システム3のフロントエンドとして動作してもよい。
【0018】
図1の例に示す情報処理装置1は、通信部11と、入力部12と、表示部13と、記憶部14と、処理部15を有する。
【0019】
通信部11は、通信ネットワーク9を介して他の装置(第2管理システム3など)と通信を行う。通信部11は、例えばイーサネット(登録商標)や無線LAN等の所定の通信規格に準拠して通信を行う装置(ネットワークインターフェースカード等)を含む。
【0020】
入力部12は、ユーザの操作に応じた指示やその他の情報を処理部15に入力する。例えば、入力部12は、キーボード、マウス、タッチパネル、タッチパッド、ボタン、スイッチ、マイク、カメラなどの入力機能を備えた機器を少なくとも1つ含む。
【0021】
表示部13は、処理部15において生成される映像信号に応じた映像を表示する装置であり、例えば液晶ディスプレイ、有機ELディスプレイ、プロジェクタなどの表示機器を含む。
【0022】
記憶部14は、処理部15において実行可能な命令を含む1以上のプログラム141や、処理部15による処理の過程で一時的に保存されるデータ、処理部15の処理に利用されるデータ、処理部15の処理の結果として得られたデータなどを記憶する。記憶部14は、例えば、主記憶装置(RAM、ROM等)と補助記憶装置(フラッシュメモリ、SSD、ハードディスク、メモリカード、光ディスクなど)を含んでよい。記憶部14は、1つの記憶装置から構成されてもよいし、複数の記憶装置から構成されてもよい。記憶部14が複数の記憶装置から構成される場合、各記憶装置は、コンピュータのバスや他の任意の通信手段を介して処理部15と接続される。
【0023】
処理部15は、情報処理装置1の全体的な動作を統括的に司り、所定の情報処理を実行する。処理部15は、例えば、記憶部14に格納された1以上のプログラム141の命令に応じて処理を実行する1以上のプロセッサ(CPU(central processing unit)、MPU(micro-processing unit)、DSP(digital signal processor)等)を含む。処理部15は、記憶部14に記憶される1以上のプログラム141の命令を1以上のプロセッサが実行することにより、コンピュータとして動作する。情報処理装置1は、このような複数のコンピュータを含んでもよく、これらのコンピュータが任意の通信ネットワークを介して通信を行うことにより連携して処理を実行してもよい。
【0024】
処理部15は、特定の機能を実現するように構成された1つ以上の専用のハードウェア(ASIC(application specific integrated circuit)、FPGA(field-programmable gate array)等)を含んでもよい。この場合、処理部15は、本実施形態において説明する全ての処理をコンピュータにおいて実行してもよいし、少なくとも一部の処理を専用のハードウェアにおいて実行してもよい。
【0025】
プログラム141は、例えばコンピュータ読み取り可能な記録媒体(光ディスク、メモリカード、USBメモリ、その他の非一時的な有形の媒体)に記録されていてもよい。処理部15は、そのような記録媒体に記録された1以上のプログラム141の少なくとも一部を不図示の記録媒体読み取り装置(光ディスク装置等)やインターフェース装置(USBインターフェース等)により読み込んで、記憶部14に書き込んでもよい。あるいは処理部15は、通信ネットワーク9に接続される他の装置から通信部11により1以上のプログラム141の少なくとも一部をダウンロードして、記憶部14に書き込んでもよい。プログラム141は、後述する本実施形態に係る処理の少なくとも一部を処理部15に行わせる命令を含んでよい。
【0026】
[記憶装置2]
記憶装置2は、情報処理装置1の処理において使用される種々の情報を記憶する。情報処理装置1と記憶装置2は、任意の通信路(LAN、専用回線網、インターネットなど)介して通信可能である。例えば記憶装置2は、複数の装置からのアクセスを受け付けるファイルサーバやデータベースサーバなどに含まれていてもよいし、情報処理装置1のみアクセス可能な専用の記憶装置でもよい。
【0027】
図1の例において、記憶装置2は、情報処理装置1が第1管理システムとして動作する場合に用いられる情報(第1データベース用情報)と、情報処理装置1が第2管理システム3の端末装置として動作する場合に用いられる情報(第2データベース用情報)を記憶する。
【0028】
第1データベース用情報は、例えば図1に示すように、第1管理システム(情報処理装置1)が管理するデータベースである第1データベース200と、第1管理システムが第1データベース200を操作するために実行するSQL文である第1SQL文202と、第1SQL文202のクエリの内容に関連するクエリ情報203と、第1管理システムにより実行される種々の処理のプログラムコードを含んだモジュール204と、フォームやレポートなどのユーザインターフェースに関するフォーム・レポート情報205とを含む。第1データベース200は、データが登録される1以上の第1テーブル201を含む。
【0029】
第2データベース情報は、例えば図1に示すように、第2管理システム3が第2データベース400を操作するために実行するSQL文である第2SQL文212と、第2管理システム3にアクセスする端末装置(情報処理装置1)において実行される種々の処理(ユーザインターフェースを提供する処理、第2管理システム3に第2SQL文を実行させる処理など)のプログラムコードを含んだモジュール214と、フォームやレポートなどのユーザインターフェースに関するフォーム・レポート情報215とを含む。端末装置(情報処理装置1)の画面に所定のオブジェクト(フォーム、レポートなど)を表示させる場合に実行されるモジュール214を、以下では「オブジェクト用モジュール」と呼ぶ場合がある。
【0030】
[第2管理システム3]
第2管理システム3は、第2データベース400の管理を行うDBMSである。第2管理システム3は、情報処理装置1による端末装置からの指示に応じて第2SQL文(212、412)のクエリを実行し、第2データベース400に対する操作を行う。また第2管理システム3は、クエリの実行結果(第1データベース200から抽出したデータなど)を端末装置に提供する。
【0031】
第2管理システム3は、例えばAzure SQL Database(登録商標)などのクラウド型のデータベースシステムでもよく、上述した情報処理装置1と同様な通信部、記憶部、処理部を備える1以上のコンピュータを含んでいてもよい。
【0032】
[記憶装置4]
記憶装置4は、第2管理システム3の処理において使用される種々の情報を記憶する。第2管理システム3と記憶装置4は、任意の通信路(LAN、専用回線網、インターネットなど)介して通信可能である。例えば記憶装置4は、複数の装置からのアクセスを受け付けるファイルサーバやデータベースサーバなどに含まれていてもよいし、記憶装置4のみアクセス可能な専用の記憶装置でもよい。
【0033】
図1の例において、記憶装置4は、第2管理システム3が管理するデータベースである第2データベース400を記憶する。第2データベース400は、データが登録される1以上の第2テーブル401を含む。また記憶装置4は、第2管理システム3が第2データベース400を操作するために実行する第2SQL文412として、ストアド・プロシージャ402と、関数403と、ビュー404を記憶する。第2管理システム3は、端末装置(情報処理装置1)からの指示に応じて、記憶装置4に格納されたSQL文(ストアド・プロシージャ402、関数403、ビュー404)を実行することができる。
【0034】
次に、上述した構成を有するシステムにおいて情報処理装置1により行われるDBMS変更処理について説明する。図2は、情報処理装置1によるDBMS変更処理の一例を説明するためのフローチャートである。
【0035】
まず情報処理装置1は、第1データベース200に対応した第2データベース400を第2管理システム3において作成する(ST100)。例えば情報処理装置1は、第1データベース200の第1テーブル201と同様なフィールドを持つ第2テーブル401を第2管理システム3に作成する。
【0036】
次に情報処理装置1は、第1データベース200について作成された1つの第1SQL文202を選択する(ST105)。情報処理装置1は、選択した第1SQL文202を解析し、その解析結果に基づいて、第1SQL文202による第1データベース200の操作に対応した第2データベース400の操作を第2管理システム3に行わせる第2SQL文212又は412を作成する(ST110)。例えば情報処理装置1は、第1SQL文202について構文解析を行い、解析した構文と同等の構文を持つ第2SQL文(212、412)を作成する。
【0037】
情報処理装置1は、1つの第1SQL文202について第2SQL文212又は412を作成すると、まだ解析していない第1SQL文202がある場合には(ST115のYes)、その第1SQL文202を選択して(ST120)、上述したステップST110の処理を行う。これにより情報処理装置1は、第1データベース200について作成された全ての第1SQL文202についてそれぞれ第2SQL文(212、412)を作成する。
【0038】
情報処理装置1は、第1管理システムにおいて第1データベース200のために用意されたユーザインターフェースのオブジェクト(フォーム、レポートなど)を、第2管理システム3の端末装置において利用可能なオブジェクトに変換し、記憶装置2に第2データベース情報(モジュール214、フォーム・レポート情報215)として保存する(ST120)。第1管理システムがACCESSであり、情報処理装置1が端末装置としてACCESSのユーザインターフェース機能(フォーム、レポートなど)を利用する場合、第1データベース200のために用意されたオブジェクト(フォーム、レポートなど)の少なくとも一部をそのまま第2データベース情報として流用してもよい。
【0039】
次に、第2SQL文(212、412)を作成するステップST110(図2)の処理の詳細について説明する。ステップST110において、情報処理装置1は処理対象の第1SQL文202の内容に応じた種々の処理を行う。ここでは、第1SQL文202の内容に応じたステップST110の処理をそれぞれ説明する。以下の説明では、一例として、第1管理システムがACCESSであり、第2管理システム3がAzure SQL Databaseであるものとする。
【0040】
<1.ユーザによるパラメータの入力を受け付けるクエリの場合>
図3Aは、第1SQL文202に対応した第2SQL文(212、412)を作成する処理の一例を説明するためのフローチャートであり、第1SQL文202のクエリがユーザによるパラメータの入力を受け付けるクエリである場合の処理を示す。
【0041】
この場合、情報処理装置1は、第1SQL文202において用いられるパラメータであって、ユーザにより入力され得る1以上のパラメータを特定する(ST200)。次に情報処理装置1は、第1SQL文202による第1データベース200の操作に対応した第2データベース400の操作を行わせる第2SQL文412として、この特定された1以上のパラメータを用いる第2SQL文412を作成する(ST205)。第2管理システム3がAzure SQL Database(登録商標)の場合、情報処理装置1は、パラメータの値を引数として渡すことが可能なストアド・プロシージャ402又は関数403を第2SQL文412として作成する。
【0042】
また情報処理装置1は、端末装置として第2管理システム3にアクセスする場合に実行されるモジュール214を作成する(ST210)。このモジュール214は、ステップST200において特定された1以上のパラメータを入力するためのユーザインターフェースを提供する1以上の第1プログラムコードと、第2管理システム3が、第1SQL文202について作成した第2SQL文412を、ユーザインターフェースによって入力される1以上のパラメータを用いて実行するように指示する第2プログラムコードとを含む。第1管理システムがACCESSの場合、モジュール214はVBA(Visual Basic for Applications )により記述されたプログラムコードを含む。端末装置(情報処理装置1)がこのモジュール214を実行することにより、第1プログラムコードが提供するユーザインターフェースにおいて必要なパラメータを入力することが可能になるとともに、入力したパラメータを第2SQL文412の引数に設定して、第2SQL文412を第2管理システム3に実行させることが可能になる。
【0043】
図3Bは、第1SQL文202のパラメータを特定する処理(ST200:図3A)の一例を説明するためのフローチャートである。
この例において、まず情報処理装置1は、第1SQL文202のクエリ情報203に含まれたパラメータ情報を取得する(ST300)。パラメータ情報は、第1SQL文202のクエリにおいて用いられる1以上のパラメータに関する情報であり、第1管理システムがACCESSの場合、クエリの定義情報を保持するQueryDefオブジェクトにおいてパラメータを保持する配列(QueryDef.Parameters)から取得することができる。
【0044】
情報処理装置1は、第1SQL文202を構成する複数のトークン(SQLにおいて意味を持った字句を表す文字列)から順に1つのトークンを選択し(ST305)、この選択したトークンが、パラメータ情報が示すパラメータを表したトークン(以下「パラメータトークン」と呼ぶ場合がある。)であるか判定する(ST310)。例えば情報処理装置1は、パラメータ情報が示すパラメータの名称とトークンの文字列とを照合し、その照合結果に基づいて、このトークンがパラメータトークンであるか判定する。
【0045】
選択したトークンがパラメータトークンである場合(ST310のYes)、情報処理装置1は、そのパラメータトークンに対応するパラメータのタイプを判別する(ST315)。本実施形態において、パラメータには、ユーザによるパラメータの入力方法が異なる複数のタイプが存在する。パラメータのタイプは、例えば、第1SQL文202におけるパラメータトークンと他のトークンとの関係や、パラメータトークンに含まれる文字列などに基づいて識別することができる。情報処理装置1は、パラメータトークンと他のトークンとが所定の関係にあることや、パラメータトークンに所定の文字列が含まれることなどを判別基準として、そのパラメータトークンに対応するパラメータのタイプを判別する。
【0046】
情報処理装置1は、1つのトークンについてステップST310、ST315の処理を行うと、まだこれらの処理を行っていないトークンがある場合には(ST320のYes)、そのトークンを選択して(ST325)、上述したステップST310、ST315の処理を行う。これにより情報処理装置1は、第1SQL文202に含まれる全てのトークンについてステップST310、ST315の処理を行う。
【0047】
情報処理装置1は、上述したステップST210(図3A)の処理においてモジュール204を作成する場合、ステップST215で判定されたパラメータのタイプにおける入力方法に適合したユーザインターフェースを提供する第1プログラムを作成する。すなわち、ステップST210(図3A)において一の第1SQL文202について作成される一の第1プログラムは、当該一の第1SQL文202に用いられる一のパラメータを入力するためのユーザインターフェースであって、当該一のパラメータについて判別されたタイプにおける入力方法に適合したユーザインターフェースを提供する。これにより、パラメータを用いる第2SQL文412のクエリを実行した場合、第1SQL文202のパラメータのタイプ(入力方法)に適合した適切なユーザインターフェースにより第2SQL文412のパラメータを入力することが可能となる。
【0048】
本実施形態において、第1SQL文202のパラメータのタイプには例えば2つのタイプ(第1タイプ、第2タイプ)が存在する。第1タイプのパラメータは、第1SQL文202に従って第1管理システムの画面に表示される入力用オブジェクト(入力ダイアログなど)により入力される。第2タイプのパラメータは、第1管理システムの画面に表示される所定のオブジェクト(フォーム、レポートなど)において入力若しくは提示されるデータに基づいて取得される。
【0049】
第1タイプのパラメータを入力するためのユーザインターフェースを提供する第1プログラムは、端末装置(情報処理装置1)において、入力用オブジェクト(入力ダイアログなど)を表示部13の画面に表示する処理と、入力用オブジェクトにおいて入力されたデータを当該第1タイプのパラメータとして取得する処理とを実行させる。
【0050】
また第2タイプのパラメータを入力するためのユーザインターフェースを提供する第1プログラムは、端末装置(情報処理装置1)において、モジュール214(オブジェクト用モジュール)を実行することにより表示部13の画面に表示される所定のオブジェクト(フォーム、レポートなど)において入力若しくは提示されるデータに基づいて、当該第2タイプのパラメータを取得することができるか判定する処理と、当該第2タイプのパラメータを取得できないと判定した場合、当該第2タイプのパラメータを入力するための入力用オブジェクト(入力ダイアログなど)を表示部13の画面に表示させる処理と、入力用オブジェクトにおいて入力されたデータを当該第2タイプのパラメータとして取得する処理とを実行させる。
【0051】
以下、第1SQL文202のクエリがパラメータの入力を受け付ける場合におけるステップST110(図2)の処理の具体例について説明する。
【0052】
図4Bは変更元の第1SQL文202の一例を示し、図4Aは第1SQL文202において操作対象となる第1テーブル201の構造の一例を示す。図4Bに示す第1SQL文202のクエリでは、第1テーブル201であるテーブル“T_明細”において、フィールド“商品CD”がパラメータ“[prm商品CD]”と等しく、かつ、フィールド“顧客CD”がパラメータ“Forms!F_割引一括設定!cbo顧客”と等しく、かつ、フィールド“単価”がパラメータ“[最低単価を入力してください]”以上である条件を満たしたレコードが抽出され、抽出されたレコードにおけるフィールド“割引額”のデータ値が“150”に更新される。
【0053】
第1管理システム(情報処理装置1)は、図4Bに示す第1SQL文202を実行すると、図4C図4Dに示すような入力ダイアログを表示部13の画面に表示し、これらの入力ダイアログにおいてパラメータ“[prm商品CD]”、“[最低単価を入力してください]”を入力する。また第1管理システム(情報処理装置1)は、図示しないフォーム“F_割引一括設定”におけるコントロール“cbo顧客”に設定された値を、パラメータ“Forms!F_割引一括設定!cbo顧客”の値として取得する。
【0054】
ステップST110(図2)において図4Bに示す第1SQL文202を解析する場合、情報処理装置1は、第1SQL文202におけるパラメータを特定する処理を行う(ST200:図3A)。まず情報処理装置1は、QueryDefオブジェクトに含まれるパラメータのオブジェクト(QueryDef.Parameters)から、第1SQL文202におけるパラメータのリストを生成する。図5Aは、パラメータのリストの例を示す。このリストにおいて、各パラメータのタイプは未だ不明である。
【0055】
次に情報処理装置1は、第1SQL文202に含まれる各トークンとリスト(図5A)に含まれるパラメータとを照合することにより、第1SQL文202に含まれるパラメータトークンを特定する(ST310:図3B)。情報処理装置1は、パラメータトークンを特定すると、そのパラメータトークンのタイプを判別する(ST315:図3B)。
【0056】
例えば情報処理装置1は、PARAMETERS句によって明示的に定義されたパラメータを第1タイプと判定する。また情報処理装置1は、パラメータトークンの先頭の文字列に“Forms”や“Reports”が含まれている場合、そのパラメータを第2タイプと判定する。パラメータトークンがこれらの条件のいずれにも該当しない場合、情報処理装置1は、そのパラメータを第1タイプと判定する。
この判定基準よると、図5Bに示すように、パラメータ“[prm商品CD]”は第1タイプと判定され、パラメータ“Forms!F_割引一括設定!cbo顧客”は第2タイプと判定され、パラメータ“[最低単価を入力してください]”は第1タイプと判定される。
【0057】
図5Cは、図4Bに示す第1SQL文202について情報処理装置1が作成する第2SQL文412の例を示す。図5Cの例において、第2SQL文412はストアド・プロシージャ402である。このストアド・プロシージャ402は、ステップST200において特定された3つのパラメータ“[prm商品CD]”、“[最低単価を入力してください]”、“Forms!F_割引一括設定!cbo顧客”に対応する3つの引数“@p_1”、“@p_2”、“@p_3”を持つ。
【0058】
図6図9は、図5Cに示すストアド・プロシージャ402(第2SQL文412)について情報処理装置1が作成するモジュール214の一例を示す図であり、VBAで記述されたファンクション・プロシージャを示す。
【0059】
図6図9の例に示すモジュール214は、第1プログラムコードP1及びP2と、第2プログラムコードP3を含む。第1プログラムコードP1(図7)は、第1タイプのパラメータ“[prm商品CD]”を入力するためのユーザインターフェースを提供し、第1プログラムコードP2(図8)は、第2タイプのパラメータ“Forms!F_割引一括設定!cbo顧客”を入力するためのユーザインターフェースを提供する。なお、第1タイプのパラメータ“[最低単価を入力してください]”を入力するためのユーザインターフェースを提供する第1プログラムコードは、図7に示す第1プログラムコードP1と概ね同じのため、図示を省略している。第2プログラムコードP3(図9)は、第2管理システム3が、図5Cに示すストアド・プロシージャ402(第2SQL文412)を、ユーザインターフェースによって入力される3つのパラメータを用いて実行するように指示する。
【0060】
図10は、端末装置(情報処理装置1)において図6図9に示すモジュール214を実行した場合の処理を説明するためのフローチャートである。
【0061】
端末装置(情報処理装置1)は、表示部13の画面において、図5Cに示すストアド・プロシージャ402(第2SQL文412)を実行する前の確認メッセージ「更新クエリを実行すると、テーブルのデータが変更されます。このアクションクエリを実行してもよいですか?」をメッセージ・ボックスにより表示する(ST400)。このメッセージ・ボックスにおいて「いいえ」ボタンが押下されると(ST405のNo)、端末装置は処理を終了する。メッセージ・ボックスにおいて「はい」ボタンが押下されると(ST405のYes)、端末装置は3つのパラメータをそれぞれ取得する処理を行う(ST410)。
【0062】
図11は、ステップST410(図10)において第1タイプのパラメータ(“[prm商品CD]”、“[最低単価を入力してください]”)を入力する処理の一例を説明するためのフローチャートである。この場合、端末装置(情報処理装置1)は、図4Cに示すような入力ダイアログを表示部13の画面に表示して、ユーザに値を入力させる(ST510)。入力ダイアログにおいて値が入力されない場合(ST515のNo)、端末装置は処理を終了する。入力ダイアログにおいて値が入力された場合(ST515のYes)、端末装置は、入力された値をストアド・プロシージャ402のパラメータに設定した後(ST520)、ストアド・プロシージャ402に設定した当該パラメータの値を読み出して、パラメータに値が設定されているか判定する(ST525)。パラメータの値が正常に設定されている場合(ST525のYes)、端末装置は処理を終了する。パラメータに値が設定されていない場合(ST525のNo)、端末装置はエラーメッセージ「このフィールドに入力した値が正しくありません。例えば数値型のフィールドに文字列を入力しました。」をメッセージ・ボックスにより表示する(ST530)。メッセージ・ボックスにおいて「はい」ボタンが押下されると、端末装置はステップST510に戻り、ステップST510以降の処理を繰り返す。
【0063】
図12は、ステップST410(図10)において第2タイプのパラメータ(“Forms!F_割引一括設定!cbo顧客”)を入力する処理の一例を説明するためのフローチャートである。図12に示すフローチャートは、図11に示すフローチャートにステップST500及びST505を追加したものであり、他の処理は図11に示すフローチャートと同じである。図12に示す処理において、まず端末装置(情報処理装置1)は、第2タイプのパラメータが示すオブジェクト(フォーム“F_割引一括設定”におけるコントロール“cbo顧客”)に設定された値を取得する(ST500)。このオブジェクトの値を正常に取得できた場合(ST505のYes)、端末装置は上述したステップST520に移行し、取得した値がストアド・プロシージャ402のパラメータに正しく設定できるか判定する(ST525)。オブジェクトの値を正常に取得できない場合(ST505のNo)、端末装置はステップST510に移行し、入力ダイアログからパラメータの値を入力させる。
【0064】
図10に戻る。
ステップST410において3つのパラメータの値を全て取得できなかった場合(ST415のNo)、端末装置(情報処理装置1)は処理を終了する。ステップST410において3つのパラメータの値を取得できた場合(ST415のYes)、端末装置は、第2管理システム3においてストアド・プロシージャ402(図5C)を仮実行させ、当該仮実行によってロールバック可能に変更された第2データベース400のデータに関する仮実行情報を取得する(ST420)。例えば端末装置は、仮実行によってロールバック可能に変更された第2データベース400のレコードの数を仮実行情報として取得する。そして端末装置は、仮実行情報を含んだ最終確認のメッセージ「xx件のレコードが更新されます。[はい]をクリックするとレコードは更新され、元に戻すことはできなくなります。」をメッセージ・ボックスにより表示する(ST425)。この確認用のメッセージ・ボックスにおいて「いいえ」ボタンが押下されると(ST430のNo)、端末装置は仮実行を取り消して(ST440)処理を終了する。メッセージ・ボックスにおいて「はい」ボタンが押下されると(ST430のYes)、端末装置は、ストアド・プロシージャ402の仮実行(ST420)による第2データベース400のデータの変更を第2管理システム3において確定させる(ST435)。
【0065】
このように、本実施形態によれば、変更元の第1SQL文202において用いられるパラメータが特定され(ST200:図3A)、第1SQL文202による第1データベース200の操作に対応した第2データベース400の操作を行わせる第2SQL文(212、412)が作成される(ST205:図3A)。この第2SQL文(212、412)では、第1SQL文202について特定された1以上のパラメータが用いられる。また、パラメータを用いる第2SQL文(212、412)が作成される場合、端末装置において実行されるモジュール204が作成される(ST210:図3A)。このモジュール204には、変更元の第1SQL文202について特定された1以上のパラメータを入力するためのユーザインターフェースをそれぞれ提供する1以上の第1プログラムコードと、第2管理システム3が、当該第1SQL文202について作成された第2SQL文(212、412)を、ユーザインターフェースによって入力される1以上のパラメータを用いて実行するように指示する第2プログラムコードとが含まれる。端末装置(情報処理装置1)においてこのモジュール204が実行されることにより、第2SQL文(212、412)のクエリに必要なパラメータがユーザインターフェースにより入力され、入力されたパラメータを用いて第2SQL文(212、412)のクエリが実行される。
従って、SQL文の記述によりパラメータ取得用のユーザインターフェースを提供する機能を持つACCESSなどの既存のDBMSを、そのような機能のない別のDBMSへ変更することが可能となる。
【0066】
また、本実施形態によれば、第1SQL文202に含まれる各パラメータについて、入力方法に関するパラメータのタイプが判別される。モジュール204において一のパラメータを入力するためのユーザインターフェースを提供する第1プログラムコードでは、判別されたタイプにおける入力方法に適合したユーザインターフェースが提供される。これにより、第1SQL文202のパラメータのタイプ(入力方法)に適合した適切なユーザインターフェースにより第2SQL文412のパラメータを入力することが可能となる。
【0067】
また、本実施形態によれば、変更元の第1SQL文202が第1データベース200に変更を加える作用型のSQL文(例えばACCESSにおけるアクションクエリなど)の場合、作用型のSQL文(第1SQL文202)について作成された作用型の第2SQL文(ストアド・プロシージャ402など)の実行を指示する第2プログラムコードによる処理において、まず第2SQL文が仮実行され(ST420:図10)、ユーザによる指示があった場合、当該仮実行による第2データベース400のデータの変更が確定される(ST435:図10)。これにより、第2SQL文(ストアド・プロシージャ402など)による第2データベース400のデータの変更を適切に確定させることができる。
【0068】
<2.複数のテーブルのデータを変更するクエリの場合>
ACCESSのSQLでは、データベースに変更を加えるアクションクエリにおいて、複数のテーブルに対するデータの変更(更新、削除)の命令を1つの命令文(UPDATE文、DELETE文)に含めることが許容されている。一方、一般的なSQLでは、複数のテーブルに対する更新や削除の命令を1つの命令文に含めることができない。
【0069】
そこで、情報処理装置1は、複数の第1テーブル201のデータに変更を加える作用型の第1SQL文202の場合、これに対応する作用型の第2SQL文(例えばストアド・プロシージャ402)として、複数の第2テーブルに対して個別に変更(更新、削除)を加えるSQL文を作成する。
例えば、情報処理装置1は、作用型の第1SQL文202において、操作対象となっている第1テーブル201を特定する処理を行う。作用型の第1SQL文202の操作対象として複数の第1テーブル201が特定された場合、情報処理装置1は、当該作用型の第1SQL文202による第1データベース200の変更に対応した第2データベース400の変更を行わせる第2SQL文(例えばストアド・プロシージャ402)として、特定された複数の第1テーブル201に対応する複数の第2テーブル401に対して個別に変更を加える第2SQL文を作成する。
【0070】
図13A図13Cは、複数のテーブルのデータを1つのUPDATE文で更新する第1SQL文202についての例を示す。図13Bは作用型の第1SQL文202の一例を示し、図13Aはこの第1SQL文202において更新の対象となる2つの第1テーブル201の構造を示す。図13Bに示す作用型の第1SQL文202のクエリでは、1つのUPDATE文の中で2つの第1テーブル201(“Table_1”、“Table_2”)が連結され、連結された2つの第1テーブル201における所定のフィールド(“Field_12”、“Field_12”)が所定の値(“aaa”、“bbb”)に更新される。
【0071】
図13Cは、図13Bに示す第1SQL文202に対して情報処理装置1が作成する第2SQL文(ストアド・プロシージャ402)の一例を示す。このストアド・プロシージャ402では、連結された2つの第1テーブル201における一方の第1テーブル201についての更新クエリと他方の第1テーブル201についての更新クエリとが、それぞれ個別のUPDATE文によって実行される。
【0072】
図14A図14Cは、複数のテーブルのデータを1つのDELETE文で削除する第1SQL文202についての例を示す。図14Bは作用型の第1SQL文202の一例を示し、図14Aはこの第1SQL文202において削除の対象となる2つの第1テーブル201の構造を示す。図14Bに示す作用型の第1SQL文202のクエリでは、1つのDELETE文の中で2つの第1テーブル201(“Table_1”、“Table_2”)が連結され、連結された2つの第1テーブル201における所定のフィールド(“Field_12”、“Field_12”)が削除される。
【0073】
図14Cは、図14Bに示す第1SQL文202に対して情報処理装置1が作成する第2SQL文(ストアド・プロシージャ402)の一例を示す。このストアド・プロシージャ402では、連結された2つの第1テーブル201における一方の第1テーブル201についての削除クエリと他方の第1テーブル201についての削除クエリとが、それぞれ個別のDELETE文によって実行される。
【0074】
このように、本実施形態によれば、複数のテーブルに対して1つの命令文により一括して変更を加える特殊なSQL文を、複数のテーブルに対して個別の命令文により変更を加える一般的なSQL文に置き換えることができる。
【0075】
<3.フィールド部に対して自動的に別名が与えられている場合>
ACCESSのSQLでは、異なるテーブルにおける同一の名称のフィールドを別名の指定なしに使用することが許容されている。これに対して、一般的なSQLでは、異なるテーブルにおける同一の名称のフィールドに対してそれぞれ別名を指定することが要求される。
またACCESSのSQLでは、同じテーブルにおける同一のフィールドを別名の指定なしに複数回使用することが許容されているが、一般的なSQLでは、別名指定のない同一のフィールドの使用はエラーになる。
更にACCESSのSQLでは、フィールドを用いた計算式を別名指定なしに使用することが許容されているが、一般的なSQLでは、フィールドを用いた計算式に別名が指定されていないとエラーになる。
ACCESSの場合、別名の指定のないフィールド部(フィールド若しくはフィールドを含む計算式)に対して自動的に別名が指定され、その別名がクエリ定義用のオブジェクト(QueryDef.Fields)に格納されるため、フィールド部に対する明示的な別名の指定を省略したSQL文が許容されている。しかしながら、一般的なSQLにはそのような機能がないため、別名の指定が省略されるとエラーになる。
【0076】
そこで、情報処理装置1は、第1SQL文202において別名の指定のないフィールド部が使用されている場合、これに対応する第2SQL文(212、412)として、各フィールド部に必要な別名を指定したSQL文を作成する。
【0077】
以下では、第1テーブル201におけるフィールドを第1フィールドと呼び、第1SQL文202において第1フィールド又は第1フィールドを含む計算式を表す部分を第1フィールド部と呼ぶ。また、第2テーブル401におけるフィールドを第2フィールドと呼び、第2SQL文(212、412)において第2フィールド又は第2フィールドを含む計算式を表す部分を第2フィールド部と呼ぶ。更に、クエリ情報203に含まれるフィールドに関する情報(例えばACCESSにおけるQueryDef.Fields)をフィールド情報と呼ぶ。
【0078】
例えば情報処理装置1は、一の第1SQL文202における1以上の第1フィールド部のうち、別名が指定されていない第1フィールド部を構文解析などにより特定する。次いで情報処理装置1は、特定した第1フィールド部の名称をフィールド情報(QueryDef.Fieldsなど)から取得する。そして情報処理装置1は、一の第1SQL文202について作成する第2SQL文(212、412)において、特定した第1フィールド部に対応する第2フィールド部の別名として、フィールド情報に含まれた名称を指定する。
【0079】
図15A図15Eは、異なる第1テーブル201に属する同一名称の第1フィールドが別名指定なしに使用された第1SQL文202についての例を示す。図15Cは第1SQL文202の一例を示し、図15Aはこの第1SQL文202の操作対象となる2つの第1テーブル201の構造を示し、図15Bは2つの第1テーブル201に格納されるデータの例を示す。図15Cに示す第1SQL文202では、SELECT句において、異なる第1テーブル201に属する同一名称の第1フィールドが別名指定なしに使用されている。図15Cに示す第1SQL文202のクエリを図15Bに示す第1テーブルに対して実行すると、図15Dに示すようなクエリの結果が得られる。図15Dに示すクエリの結果における“Table_1.Field_A”、“Table_1.Field_A”は、それぞれ第1管理システムが自動的に付与した別名であり、フィールド情報(QueryDef.Fieldsなど)に格納される。
【0080】
図15Eは、図15Cの第1SQL文202に対して情報処理装置1が作成する第2SQL文(212、412)の例を示す。図15Eに示す第2SQL文(212、412)では、SELECT句に記載される各第2フィールドに対して、フィールド情報(QueryDef.Fieldsなど)から取得された別名が指定されている。
【0081】
図16A図16Eは、同一の第1フィールドが別名指定なしに複数回使用された第1SQL文202についての例を示す。図16Cは第1SQL文202の一例を示し、図16Aはこの第1SQL文202の操作対象となる第1テーブル201の構造を示し、図16Bは第1テーブル201に格納されるデータの例を示す。図16Cに示す第1SQL文202では、SELECT句において、同一の第1フィールドが別名指定なしに3回使用されている。図16Cに示す第1SQL文202のクエリを図16Bに示す第1テーブルに対して実行すると、図16Dに示すようなクエリの結果が得られる。図16Dに示すクエリの結果における“Expr1001”、“Expr1002”は、それぞれ第1管理システムが自動的に付与した別名であり、フィールド情報(QueryDef.Fieldsなど)に格納される。
【0082】
図16Eは、図16Cの第1SQL文202に対して情報処理装置1が作成する第2SQL文(212、412)の例を示す。図16Eに示す第2SQL文(212、412)では、SELECT句に複数回記載される同一の第2フィールドに対して、フィールド情報(QueryDef.Fieldsなど)から取得された別名が指定されている。
【0083】
図17A図17Eは、計算式を含む第1フィールド部が別名指定なしに使用された第1SQL文202についての例を示す。図17Cは第1SQL文202の一例を示し、図17Aはこの第1SQL文202の操作対象となる第1テーブル201の構造を示し、図17Bは第1テーブル201に格納されるデータの例を示す。図17Cに示す第1SQL文202では、SELECT句において、計算式を含む第1フィールド部(“Field_A+Field_B”)が別名指定なしに使用されている。図17Cに示す第1SQL文202のクエリを図17Bに示す第1テーブルに対して実行すると、図17Dに示すようなクエリの結果が得られる。図17Dに示すクエリの結果における“Expr1001”は、第1管理システムが自動的に付与した別名であり、フィールド情報(QueryDef.Fieldsなど)に格納される。
【0084】
図17Eは、図17Cの第1SQL文202に対して情報処理装置1が作成する第2SQL文(212、412)の例を示す。図17Eに示す第2SQL文(212、412)では、SELECT句に記載される計算式を含んだ第2フィールド部に対して、フィールド情報(QueryDef.Fieldsなど)から取得された別名が指定されている。
【0085】
このように、本実施形態によれば、第1SQL文202において第1フィールド部に対する別名が省略されている場合でも、第1管理システムにより生成されたフィールド情報(QueryDef.Fieldsなど)に含まれる第1フィールド部の名称に基づいて、第2SQL文(212、412)に記載される第2フィールド部に別名を指定することができるため、第2管理システム3におけるSQL文のエラーを回避できる。
【0086】
<4.数値型の引数を渡す構文が真偽型の引数を渡す構文へ変換される場合>
ACCESSのSQLでは、引数の真偽に応じた処理を行う関数や構文に対して数値型の引数を渡した場合、引数の値がゼロであれば偽であり、ゼロ以外であれば真であると解釈されるためエラーにはならないが、一般的なSQLでは、そのような場合にエラーとなる。
【0087】
そこで、情報処理装置1で、引数の真偽に応じた処理を行う関数や構文に対して数値型の引数を渡した第1SQL文202の場合、数値型の引数を真偽式に置き換えた第2SQL文(212、412)を作成する。
【0088】
例えば情報処理装置1は、第1SQL文202に対応した第2SQL文(212、412)を作成する処理において、第1SQL文202に所定の構文又は所定の関数(例えばACCESSにおけるIIF関数など)が含まれる場合には、これを第2SQL文(212、412)において別の構文又は別の関数(例えばCASE WHEN~THEN~ELSE~ENDなど)に置き換える。ここで情報処理装置1は、第1SQL文202における置換元の所定の構文又は所定の関数に渡される引数(第1引数)のデータ型が数値である一方、置換先の別の構文又は別の関数に渡される引数(第2引数)のデータ型が真又は偽の値をとるデータ型であるときは、第1引数がゼロのときに偽の値をとり、第1引数がゼロ以外のときに真の値をとる真偽式を第2引数として設定する。
【0089】
図18A図18Fは、引数の真偽に応じた処理を行う関数や構文に対して数値型の引数を渡した第1SQL文202についての例を示す。図18Cは第1SQL文202の一例を示し、図18Aはこの第1SQL文202の操作対象となる第1テーブル201の構造を示し、図18Bは第1テーブル201に格納されるデータの例を示す。図18Cに示す第1SQL文202では、別名“[判定結果]”の第1フィールド部にIIF関数が用いられており、このIIF関数には数値型の第1引数“Field_A+Field_B”が渡されている。第1フィールド部“[判定結果]”の値は、第1引数の値がゼロの場合に“加算結果は偽”となり、第1引数の値がゼロ以外の場合に“加算結果は真”となる。図18Cに示す第1SQL文202のクエリを図18Bに示す第1テーブルに対して実行すると、図18Dに示すようなクエリの結果が得られる。
【0090】
図18Eは、図18Cの第1SQL文202におけるIIF関数をCASE WHEN~THEN~ELSE~ENDの構文に置き換えたSQL文を示す。図18Eに示すSQL文では、CASE WHENに続く引数“Field_A+Field_B”が数値型であるため、一般的なSQLではエラーになる。
【0091】
図18Fは、情報処理装置1が作成する第2SQL文(212、412)の例を示す。図18Fに示す第2SQL文(212、412)では、CAST関数によって“CAST(Field_A+Field_B AS int)”のデータ型が整数型となり、これを含む第2引数“CAST(Field_A+Field_B AS int)<>0”が真偽式となる。真偽式の第2引数は、“Field_A+Field_B”がゼロのときに偽の値をとり、“Field_A+Field_B”がゼロ以外のときに真の値をとる。
【0092】
このように、本実施形態によれば、第1SQL文202において引数の真偽に応じた処理を行う関数や構文に対して数値型の第1引数が渡されている場合でも、第2SQL文(212、412)において引数の真偽に応じた処理を行う関数や構文に対して真偽式の第2引数が渡されるため、引数のデータ型に起因するエラーを回避することができる。
【0093】
<5.フィールド部の記載が省略された構文の場合>
ACCESSのSQLでは、フィールドに関わる操作を表す所定の構文(INSERT~INTO~など)において、操作対象のフィールドの記載(例えばINSERTの後に続くフィールドの記載)を省略できる場合があるが、一般的なSQLでは、そのような場合にエラーとなる。
【0094】
そこで、情報処理装置1は、変更元の第1SQL文202において省略されたフィールドの記載を、変更先の第2SQL文(212、412)において補完する。
【0095】
例えば情報処理装置1は、変更元の第1SQL文202において、第1フィールド部に関わる操作を表す所定の第1構文(INSERT~INTO~など)を特定する。次いで情報処理装置1は、特定した第1構文を含むテスト用の第1SQL文202を作成して第1管理システムに処理させ、当該テスト用の第1SQL文202について第1管理システムが生成したテスト用のフィールド情報(QueryDef.Fieldsなど)を取得する。そして情報処理装置1は、第1SQL文202の第1構文に対応する第2SQL文(212、412)の第2構文を作成する場合、第2構文含まれるべき第2フィールド部の名称を、テスト用のフィールド情報に基づいて設定する。
【0096】
図19A図19Cは、INSERT文においてフィールドの記載が省略された第1SQL文202についての例を示す。図19Bは変更元の第1SQL文202の一例を示し、図19Aは第1SQL文202において操作対象となる2つの第1テーブル201の構造を示す。図19Bに示す第1SQL文202ではINSERTの後に続く挿入先のフィールドの記載が省略されている。このような第1SQL文202に対して、情報処理装置1は、図19Cに示す第2SQL文(212、412)を作成する。この第2SQL文(212、412)では、INSERTの後に挿入先のフィールドの記載(“Field_A”、“Field_B”)が追加される。これにより、INSERTの後に続く挿入先のフィールドと、SELECTの後に続く挿入元のフィールドとが一対一に対応する。
【0097】
このように、本実施形態によれば、変更元の第1SQL文202においてフィールドの記載が省略されている場合でも、変更先の第2SQL文(212、412)においてフィールドの記載が補完されるため、フィールドの記載の省略に起因するエラーを回避できる。
【0098】
<6.サブクエリの別名が省略されている場合>
ACCESSのSQLでは、サブクエリに対する別名の指定を省略することが許容されるが、一般的なSQLでは、サブクエリの別名指定を省略するとエラーになる。
【0099】
そこで、情報処理装置1は、変更元の第1SQL文202において別名指定されていないサブクエリがある場合、変更先の第2SQL文(212、412)において、サブクエリに対する別名指定の記載を補完する。
【0100】
例えば情報処理装置1は、変更元の第1SQL文202において、別名指定されていないサブクエリ(第1サブクエリ)を特定する。また情報処理装置1は、変更元の第1SQL文202において使用される第1テーブル201の名称、クエリ(サブクエリ)の名称、明示的に指定された別名を構文解析により抽出し、使用済み名称として取得する。そして情報処理装置1は、変更先の第2SQL文(212、412)において第1サブクエリに対応するサブクエリ(第2サブクエリ)を作成する場合、使用済み名称に含まれる名称と重複しない別名を第2サブクエリに対して設定する。
【0101】
図20A図20Cは、サブクエリに対する別名の指定が省略された第1SQL文202についての例を示す。図20Bは変更元の第1SQL文202の一例を示し、図20Aは第1SQL文202において操作対象となる第1テーブル201の構造を示す。図20Bに示す第1SQL文202では、FROM句に記載されたサブクエリに対する別名の指定が省略されている。このような第1SQL文202に対して、情報処理装置1は、図20Cに示す第2SQL文(212、412)を作成する。この第2SQL文(212、412)では、FROM句において使用される第2テーブル401の名称と重複しない別名“TableExpr0001”がサブクエリに対して設定されている。
【0102】
このように、本実施形態によれば、変更元の第1SQL文202において別名指定されていないサブクエリがある場合でも、変更先の第2SQL文(212、412)においてサブクエリに対する別名指定の記載が補完されるため、サブクエリの別名が省略されることによるエラーを回避できる。
【0103】
<7.特定の構文の中でフィールド部の別名が他のフィールド部に用いられている場合>
ACCESSのSQLでは、特定の構文(例えばSELECT文)の中でフィールド部に別名が指定されている場合、その別名を当該特定の構文の中における別のフィールド部(フィールドの計算式など)に使用することが許容されているが、一般的なSQLでは、そのような別名の使用はエラーになる。
【0104】
そこで、情報処理装置1は、変更元の第1SQL文202における特定の構文(例えばSELECT文)において第1フィールド部に別名が指定されるとともに、その別名が当該特定の構文の中における別の第1フィールド部に使用されている場合、変更先の第2SQL文(212、412)において当該特定の構文に対応した構文を作成する際に、第2フィールド部に指定された別名を、別の第2フィールド部において使用しないようにする(第2フィールド部の元の名称を使用する)。
【0105】
以下では、SQL文においてフィールド部に関わるデータ抽出操作を表す構文(例えばSELECT文)をデータ抽出構文と呼ぶ。また、第1SQL文202におけるデータ抽出構文を第1データ抽出構文と呼び、第2SQL文(212、412)におけるデータ抽出構文を第2データ抽出構文と呼ぶ。
【0106】
例えば情報処理装置1は、変更元の第1SQL文202において、複数の第1フィールド部に関わるデータ抽出操作を表す第1フィールド抽出構文(例えばSELECT文)を特定する。次いで情報処理装置1は、特定した第1フィールド抽出構文に含まれる複数の第1フィールド部と、第1フィールド部について指定された別名とを含むリストを、フィールドリストとして取得する。フィールドリストを取得した情報処理装置1は、このフィールドリストに含まれる複数の第1フィールド部において、フィールドリストに含まれる別名と同一の文字列が含まれた第1フィールド部(別名含有フィールド部)を特定する。そして情報処理装置1は、変更先の第2SQL文(212、412)において、特定した第1フィールド抽出構文に対応する第2フィールド抽出構文を作成する場合、特定した第1フィールド部(別名含有フィールド部)に含まれる別名と同一の文字列が、当該別名に対応する第1フィールド部を含んだ文字列へ置き換えられることにより得られる一連の文字列を作成する。情報処理装置1は、特定した第1フィールド部(別名含有フィールド部)に対応する第2フィールド部として、この作成した文字列を設定する。
【0107】
図21A図21Dは、フィールド抽出構文の中でフィールド部の別名を含むフィールド部(別名含有フィールド部)が使用された第1SQL文202についての例を示す。図21Bは変更元の第1SQL文202の一例を示し、図21Aは第1SQL文202において操作対象となる第1テーブル201の構造を示す。図21Bに示す第1SQL文202では、SELECT文における第1フィールド部“[単価]*[数量]”の別名“[金額]”が、SELECT文における別の第1フィールド部“[原価]/[金額]”に含まれている。
【0108】
まず情報処理装置1は、図21Bに示す第1SQL文202において第1フィールド抽出構文としてSELECT文を特定すると、そのSELECT文に含まれる複数の第1フィールド部と、第1フィールド部について指定された別名とを含むフィールドリスト取得する。図21Cは、そのフィールドリストを示す図である。
【0109】
次いで情報処理装置1は、図21Cに示すフィールドリストに含まれる複数の第1フィールド部において、フィールドリストに含まれる別名と同一の文字列が含まれた第1フィールド部(別名含有フィールド部)を特定する。図21Cの例では、第1フィールド部“[原価]/[金額]”が別名含有フィールド部である。
【0110】
図21Dは、図21Bに示す第1SQL文202について情報処理装置1が生成する第2SQL文(212、412)の一例を示す。図21Dに示する第2SQL文(212、412)では、特定された別名含有フィールド部“[原価]/[金額]”に対応する第2フィールド部として、“[原価]/[金額]”における“[金額]”を“([単価]*[数量])”に置き換えた文字列が作成されている。
【0111】
このように、本実施形態によれば、第1SQL文202の第1フィールド抽出構文(例えばSELECT文)の中に別の第1フィールド部の別名を含む第1フィールド部(別名含有フィールド部)が存在する場合でも、第2フィールド部に指定された別名が別の第2フィールド部において使用されなように(第2フィールド部の元の名称を使用するように)第2SQL文(212、412)が作成される。これにより、フィールド抽出構文の中におけるフィールド部の別名の使用に伴うエラーを回避できる。
【0112】
<8.抽出されたデータの並び順を指定する構文の場合>
ACCESSのSQLでは、フィールド抽出構文(例えばSELECT文)においてデータ抽出結果におけるデータの並び順を指定する並び順指定句(例えばORDER BY句)が含まれる場合、データ抽出結果におけるデータ数を指定するデータ数指定句(例えばTOP句)が存在しなくても正常にクエリが実行されるが、一般的なSQLでは、フィールド抽出構文において並び順指定句とともにデータ数指定句が存在しないとエラーになる。
【0113】
そこで情報処理装置1は、第1SQL文202に含まれる第1フィールド抽出構文(例えばSELECT文)を特定し、特定した第1フィールド抽出構文において、並び順指定句(例えばORDER BY句)が含まれるか判定する。特定した第1フィールド抽出構文に並び順指定句が含まれる場合、情報処理装置1は、特定した第1フィールド抽出構文に対応するの第2フィールド抽出構文において、並び順指定句に加えてデータ数指定句(例えばTOP句)が含まれるように第2フィールド抽出構文を作成する。
【0114】
図22A図22Cは、第1フィールド抽出構文に並び順指定句が含まれた第1SQL文202についての例を示す。図22Bは変更元の第1SQL文202の一例を示し、図22Aは第1SQL文202において操作対象となる第1テーブル201の構造を示す。図22Bに示す第1SQL文202は、並び順指定句としてORDER BY句を含んでいるが、データ数指定句(例えばTOP句)が存在しないため、一般的なSQLではエラーになる。
【0115】
図22Cは、図22Bに示す第1SQL文202について情報処理装置1が生成する第2SQL文(212、412)の例を示す。図22Cに示す第2SQL文(212、412)では、SELECT句の後にTOP句が追加されている。このTOP句によるデータ数として“100 PERCENT”が設定されているため、クエリの実行結果には抽出対象に該当する全てのデータが含まれる。
【0116】
このように、本実施形態によれば、第1SQL文202における第1フィールド抽出構文(例えばSELECT文)に並び順指定句(例えばORDER BY句)が含まれる場合、第2SQL文(212、412)における第2フィールド抽出構文には、並び順指定句とともにデータ数指定句(例えばTOP句)が含まれる。そのため、並び順指定句を含むフィールド抽出構文においてデータ数指定句が存在しないことによるエラーを回避できる。
【0117】
なお、本発明は上述した実施形態にのみ限定されるものではなく、種々のバリエーションを含んでいる。
【0118】
例えば、上述した実施形態では、DBMS変更処理を行う情報処理装置1が、第1管理システムとしての機能と、第2管理システム3の端末装置としての機能とをそれぞれ備えているが、本実施形態はこの例に限定されない。本実施形態の他の例では、これらの機能の少なくとも一方を、情報処理装置1以外の別の装置(コンピュータなど)が備えていてもよい。
【0119】
DBMS変更処理を行う情報処理装置1は、任意の通信手段(LAN、WAN、インターネットなど)により接続された複数のコンピュータを含むコンピュータシステムでもよい。その場合、DBMS変更処理を複数のコンピュータに分担させてもよい。
【符号の説明】
【0120】
1…情報処理装置、11…通信部、12…入力部、13…表示部、14…記憶部、141…プログラム、15…処理部、2…記憶装置、200…第1データベース、201…第1テーブル、202…第1SQL文、203…クエリ情報、204…モジュール、205…フォーム・レポート情報、212…第2SQL文、214…モジュール、215…フォーム・レポート情報、3…第2管理システム、4…記憶装置、400…第2データベース、401…第2テーブル、402…ストアド・プロシージャ、403…関数、404…ビュー、412…第2SQL文
【要約】
【課題】SQL文の記述によりパラメータ取得用のユーザインターフェースを提供する機能を持つ既存のデータベース管理システム(DBMS)を、そのような機能のない別のDBMSへ変更する方法、プログラム及び情報処理装置を提供する。
【解決手段】変更先のDBMSの第2SQL文を作成する工程(ST110)は、変更元のDBMSの第1SQL文で用いられるパラメータを特定することと、特定されたパラメータを用いる第2SQL文を作成することと、ユーザが操作する端末装置で実行されるモジュールを作成することとを含む。モジュールは、パラメータ入力用のユーザインターフェースを提供する第1プログラムコードと、変更先のDBMSが、当該第1SQL文について作成した第2SQL文を、ユーザインターフェースにより入力されるパラメータを用いて実行するように指示する第2プログラムコードとを含む。
【選択図】図2
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22