(57)【要約】【課題】  仕様変更等に柔軟に対応でき、スキルに依存しない安定した品質のＳＱＬ文を生成するＳＱＬ自動生成のためのプログラムを提供する。【解決手段】  本発明に係るプログラムで動作する動的ＳＱＬ自動生成エンジンは、機能情報１から所定の機能に応じた機能項目を取得する機能項目取得部５と、ＤＢテーブル情報２と項目情報３とからＳＥＬＥＣＴ句を生成するＳＥＬＥＣＴ句生成処理部６と、ＤＢテーブル情報２からＦＲＯＭ句を生成するＦＲＯＭ句生成処理部７と、ＤＢテーブル情報２と条件情報４とからＷＨＥＲＥ句を生成するＷＨＥＲＥ句生成処理部８と、を少なくとも備える。【選択図】図１
2006235770.tif 000002
【特許請求の範囲】
【請求項１】
指定された機能項目を、所定の機能に応じた１又は２以上の機能項目からなる機能情報が記憶された機能情報記憶部から取得する機能項目取得部と、
該取得した機能項目に関連付けられたＤＢテーブル識別を、前記機能項目とデータベースに格納されたＤＢテーブルのＤＢテーブル識別とを関連付けるＤＢテーブル情報が記憶されたＤＢテーブル情報記憶部から取得し、該取得したＤＢテーブル識別からＦＲＯＭ句を生成するＦＲＯＭ句生成処理と、
前記取得した機能項目に関連付けられた前記ＤＢテーブルの項目を、前記機能項目と前記ＤＢテーブルの項目とを関連付け、該ＤＢテーブルの項目と前記ＤＢテーブル情報のＤＢテーブル識別とを関連付ける項目情報が記憶された項目情報記憶部から取得し、該取得した項目と関連付けられたＤＢテーブル識別を前記ＤＢテーブル情報記憶部から取得し、該取得した項目及びＤＢテーブル識別からＳＥＬＥＣＴ句を生成するＳＥＬＥＣＴ句生成処理と、
前記取得した機能項目に関連付けられた条件を、前記機能項目と前記ＤＢテーブルの項目に対する条件とを関連付け、該条件と前記ＤＢテーブル情報のＤＢテーブル識別とを関連付ける条件情報が記憶された条件情報記憶部から取得し、該取得した条件と関連付けられたＤＢテーブル識別を前記ＤＢテーブル情報記憶部から取得し、該取得した条件及びＤＢテーブル識別からＷＨＥＲＥ句を生成するＷＨＥＲＥ句生成処理と、
前記ＳＥＬＥＣＴ句生成処理、前記ＦＲＯＭ句生成処理、及び前記ＷＨＥＲＥ句生成処理によって得たＳＥＬＥＣＴ句、ＦＲＯＭ句、及びＷＨＥＲＥ句からＳＱＬ文を生成するＳＱＬ文生成処理と、
を情報処理装置に実行させることを特徴とするＳＱＬ自動生成プログラム。
【請求項２】
グループ化する対象となる前記ＤＢテーブルの項目を、グループ化対象となる前記ＤＢテーブルの項目を示すグループ化情報を更に備えた前記項目情報が記憶された前記項目情報記憶部から取得し、該取得した項目からＧＲＯＵＰ  ＢＹ句を生成するＧＲＯＵＰ  ＢＹ句生成処理を更に備えることを特徴とする請求項１に記載のＳＱＬ自動生成プログラム。
【請求項３】
ソート対象となる前記ＤＢテーブルの項目を、ソート対象となる前記ＤＢテーブルの項目を示すソート情報を更に備えた前記項目情報が記憶された前記項目情報記憶部から取得し、該取得した項目からＯＲＤＥＲ  ＢＹ句を生成するＯＲＤＥＲ  ＢＹ句生成処理を更に備えることを特徴とする請求項１に記載のＳＱＬ自動生成プログラム。
【請求項４】
前記条件情報は、該条件情報が備える条件をＷＨＥＲＥ句生成処理に使用するか否かを制御する必須条件フラグを更に備えることを特徴とする請求項１に記載のＳＱＬ自動生成プログラム。
【請求項５】
前記項目情報の項目、ＤＢテーブル情報のＤＢテーブル識別、及び条件情報の条件は、異なるＳＱＬ文を生成する単位であるクエリ番号毎に構成され、前記ＦＲＯＭ句生成処理又は前記ＷＨＥＲＥ句生成処理において、１のクエリ番号について生成したＳＱＬ文を、他のクエリ番号について生成するＳＱＬ文に副問い合せとして組み込むことを特徴とする請求項１に記載のＳＱＬ自動生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的にＳＱＬ文を生成するＳＱＬ自動生成のためのプログラムに関する。
【背景技術】
【０００２】
ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）は、データベースの定義や操作等を行なうための言語であり、ＳＱＬを利用することにより、データベースへの問い合せ、データの追加、更新、削除、データの検索・集計等を行なうことができる。
【０００３】
また、例えば、近年のネットワーク環境の発達にともなって、Ｊａｖａ（登録商標）等で作成されたＷｅｂアプリケーションにＳＱＬ文を組み込んで、Ｗｅｂブラウザから容易にデータベースを操作できるようにするなど、データベースを操作するアプリケーションの多くには、ＳＱＬ文が組み込まれている。
【０００４】
従来、ＳＱＬ文のプログラム作成は、ＳＱＬ文法やデータベースについて十分に理解した熟練者によって為されていた。
【特許文献１】特開２００１−１４２８８５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、アプリケーションの品質は、開発者のＳＱＬ文法やデータベースについての理解の度合い（スキル）に依存する場合もあるため、品質が安定し難いという問題があった。
【０００６】
また、顧客から仕様変更の依頼があった場合等には、その都度、プログラムソースを見てＳＱＬ文を変更する必要が生じるため柔軟性に欠け、また、作業効率が悪いという問題があった。
【０００７】
本発明は、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、仕様変更等に柔軟に対応でき、開発者のスキルに依存しない安定した品質のＳＱＬ文を生成するＳＱＬ自動生成のためのプログラムを提供することである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明に係る動的ＳＱＬ自動生成エンジンのためのプログラムは、指定された機能項目を、所定の機能に応じた１又は２以上の機能項目からなる機能情報が記憶された機能情報記憶部から取得する機能項目取得部と、該取得した機能項目に関連付けられたＤＢテーブル識別を、前記機能項目とデータベースに格納されたＤＢテーブルのＤＢテーブル識別とを関連付けるＤＢテーブル情報が記憶されたＤＢテーブル情報記憶部から取得し、該取得したＤＢテーブル識別からＦＲＯＭ句を生成するＦＲＯＭ句生成処理と、前記取得した機能項目に関連付けられた前記ＤＢテーブルの項目を、前記機能項目と前記ＤＢテーブルの項目とを関連付け、該ＤＢテーブルの項目と前記ＤＢテーブル情報のＤＢテーブル識別とを関連付ける項目情報が記憶された項目情報記憶部から取得し、該取得した項目と関連付けられたＤＢテーブル識別を前記ＤＢテーブル情報記憶部から取得し、該取得した項目及びＤＢテーブル識別からＳＥＬＥＣＴ句を生成するＳＥＬＥＣＴ句生成処理と、前記取得した機能項目に関連付けられた条件を、前記機能項目と前記ＤＢテーブルの項目に対する条件とを関連付け、該条件と前記ＤＢテーブル情報のＤＢテーブル識別とを関連付ける条件情報が記憶された条件情報記憶部から取得し、該取得した条件と関連付けられたＤＢテーブル識別を前記ＤＢテーブル情報記憶部から取得し、該取得した条件及びＤＢテーブル識別からＷＨＥＲＥ句を生成するＷＨＥＲＥ句生成処理と、前記ＳＥＬＥＣＴ句生成処理、前記ＦＲＯＭ句生成処理、及び前記ＷＨＥＲＥ句生成処理によって得たＳＥＬＥＣＴ句、ＦＲＯＭ句、及びＷＨＥＲＥ句からＳＱＬ文を生成するＳＱＬ文生成処理と、を情報処理装置に実行させることを特徴とする。
【０００９】
本発明によると、指定された機能項目に関連付けられたＤＢテーブル識別をＤＢテーブル情報から取得してＦＲＯＭ句を生成し、指定された機能項目に関連付けられたＤＢテーブルの項目を項目情報から取得してＳＥＬＥＣＴ句を生成し、指定された機能項目に関連付けられた条件を条件情報から取得してＷＨＥＲＥ句を生成し、生成したＳＥＬＥＣＴ句、ＦＲＯＭ句、及びＷＨＥＲＥ句からＳＱＬ文を生成する。
【００１０】
すなわち、ＤＢテーブル情報、項目情報、及び条件情報を例えば、設計仕様書等に基づいてあらかじめ作成することによって、ＳＱＬ文を自動的に生成することが可能となるので、ＳＱＬ文のプログラミングを行なう必要がなくなり、安定した品質のＳＱＬ文を生成することができる。
【００１１】
また、仕様変更時には、仕様変更された設計仕様書等に基づいてＤＢテーブル情報、項目情報、及び条件情報を変更することによって、容易に仕様変更に対応することが可能となる。
【発明の効果】
【００１２】
以上のように、本発明によると、仕様変更等に柔軟に対応でき、開発者のスキルに依存しない安定した品質のＳＱＬ文を生成するＳＱＬ自動生成のためのプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施形態について図１〜図２９に基づいて説明する。
図１は、本発明の原理を示す図である。
同図に示す本発明に係る動的ＳＱＬ自動生成エンジンは、機能情報１から所定の機能に応じた機能項目を取得する機能項目取得部５と、ＤＢテーブル情報２と項目情報３とからＳＥＬＥＣＴ句を生成するＳＥＬＥＣＴ句生成処理部６と、ＤＢテーブル情報２からＦＲＯＭ句を生成するＦＲＯＭ句生成処理部７と、ＤＢテーブル情報２と条件情報４とからＷＨＥＲＥ句を生成するＷＨＥＲＥ句生成処理部８と、を少なくとも備える。
【００１４】
機能情報１は、所定の機能と機能に応じた機能項目（機能ＩＤ）からなり、ＤＢテーブル情報２は、各機能項目と機能項目の処理に必要となるデータベース内に格納されているテーブル（以下、「ＤＢテーブル」という）とを関連づける。また、項目情報３は、各機能項目と機能項目の処理に必要となるＤＢテーブルの項目とを関連づけ、条件情報４は、各機能項目と機能項目の処理に必要となる条件とを関連づける。
【００１５】
機能項目取得部５は、所定の指示によって機能情報１から機能項目を取得する。ＳＥＬＥＣＴ句生成処理部６は、取得した機能項目に応じたＤＢテーブル識別（名）をＤＢテーブル情報２から取得し、さらに、当該ＤＢテーブルの項目を項目情報３から取得してＳＥＬＥＣＴ句を生成する。
【００１６】
ＦＲＯＭ句生成処理部７は、機能項目取得部５で取得した機能項目に応じたＤＢテーブルの項目をＤＢテーブル情報２から取得してＦＲＯＭ句を生成する。
ＷＨＥＲＥ句生成処理部８は、機能項目取得部５で取得した機能項目の処理に応じた条件を条件情報４から取得してＷＨＥＲＥ句を生成する。
【００１７】
そして、ＳＱＬ文生成処理部９は、ＳＥＬＥＣＴ句生成処理部６、ＦＲＯＭ句生成処理部７、ＷＨＥＲＥ句生成処理部８によって生成された各句からＳＱＬ文を生成する。
また、同図示す動的ＳＱＬ自動生成エンジンは、ＤＢテーブル情報２と項目情報３とからＧＲＯＵＰ  ＢＹ句を生成するＧＲＯＵＰ  ＢＹ句生成処理部２０と、ＤＢテーブル情報２と項目情報３とからＯＲＤＥＲ  ＢＹ句を生成するＯＲＤＥＲ  ＢＹ句生成処理部２１と、を更に備えている。
【００１８】
したがって、ＳＱＬ文生成処理部９は、ＳＥＬＥＣＴ句生成処理部６、ＦＲＯＭ句生成処理部７、ＷＨＥＲＥ句生成処理部８、ＧＲＯＵＰ  ＢＹ句生成処理部２０、及びＯＲＤＥＲ  ＢＹ句生成処理部２１によって生成された各句からＳＱＬ文を生成する。
【００１９】
ここで、本発明の実施例に係る動的ＳＱＬ自動生成エンジンは、一般的な情報処理装置によって実現される。すなわち、ＳＱＬ文等の生成処理を行なうＣＰＵと、生成処理時に必要なデータを一時的に記憶する揮発性メモリと、プログラムやデータを記録するための外部記録装置と、を少なくとも備えた情報処理装置によって実現することができる。
【００２０】
したがって、同図に示した機能項目取得部５、ＳＥＬＥＣＴ句生成処理部６、ＦＲＯＭ句生成処理部７、ＷＨＥＲＥ句生成処理部８、ＧＲＯＵＰ  ＢＹ句生成処理部２０、ＯＲＤＥＲ  ＢＹ句生成処理部２１、及びＳＱＬ文生成処理部９は主として情報処理装置に備わるＣＰＵに所定の処理を記述したプログラムを実行させることによって実現することが可能である。
【００２１】
また、機能情報１、ＤＢテーブル情報２、項目情報３、条件情報４は、情報処理装置と通信可能に接続されたＲＤＢＭＳ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）によって管理されるデータベースに記憶してもよく、情報処理装置が備える揮発性メモリ（例えば、ＲＡＭ）、不揮発性メモリ（例えば、ＥＥＰＲＯＭ）に備えてもよい。
【００２２】
なお、以下に説明する本実施例に係る動的ＳＱＬ自動生成エンジンの処理の主体はＣＰＵであるが、説明を簡単にするために機能項目取得部５、ＳＥＬＥＣＴ句生成処理部６、ＦＲＯＭ句生成処理部７、ＷＨＥＲＥ句生成処理部８、ＧＲＯＵＰ  ＢＹ句生成処理部２０、ＯＲＤＥＲ  ＢＹ句生成処理部２１、及びＳＱＬ文生成処理部９を処理の主体として説明する。
【００２３】
図２は、本発明に係る実施例の概要を示す図である。
操作者は、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を介してＲＤＢＭＳにアクセスし、あらかじめ機能情報１、ＤＢテーブル情報２、項目情報３、及び条件情報４を図示しないデータベース上に生成する。
【００２４】
また、動的ＳＱＬ自動生成エンジン１２を起動するための起動ＩＦ（Ｉｎｔｅｒｆａｃｅ）１３を介して、図示しないアプリケーションが動的ＳＱＬ自動生成エンジン１２を起動すると、動的ＳＱＬ自動生成エンジン１２は、機能情報１、ＤＢテーブル情報２、項目情報３、及び条件情報４から必要な情報を読み出し、ＳＱＬ構築単位毎に、ＳＥＬＥＣＴ句、ＦＲＯＭ句、及びＷＨＥＲＥ句からなるＱｕｅｒｙ１４を生成し、起動ＩＦ１３を介してアプリケーションに通知する。図示しないが、アプリケーションは、通知されたＳＱＬ文を用いてデータベースにアクセスすることとなる。
【００２５】
図３は、本実施例で行なわれる処理の例の概要を示す図である。
受注伝票印刷アプリケーション１５がディスプレイ等の表示装置に表示した受注伝票印刷ダイアログボックス１６に、操作者が伝票受付開始日時と伝票受付終了日時を入力して印刷ボタンを押下し、受注伝票印刷の指示を行なうと、受注伝票印刷アプリケーション１５は、受注伝票印刷ダイアログボックス１６から送られたパラメータ（伝票受付開始日付、伝票受付終了日時）及び、自アプリケーションの機能に対応する機能ＩＤを、動的ＳＱＬ自動生成エンジン１２の起動ＩＦ１３に受け渡し、動的ＳＱＬ自動生成エンジン１２を起動する。
【００２６】
動的ＳＱＬ自動生成エンジン１２は、受け取ったパラメータである機能ＩＤ、伝票受付開始日付、及び伝票受付終了日時に基づいてデータベース１１に格納された機能情報１、ＤＢテーブル情報２、項目情報３、及び条件情報４から必要なデータを取得してＳＱＬ文を生成する。
【００２７】
そして、動的ＳＱＬ自動生成エンジン１２は、生成したＳＱＬ文を起動ＩＦ１３を介して受注伝票印刷アプリケーション１５に受け渡す。
受注伝票印刷アプリケーション１５は、動的ＳＱＬ自動生成エンジン１２から受け取ったＳＱＬ文を実行してデータベース１７から受注伝票印刷に必要なデータを取得して印刷処理を行ない、受注伝票１８をプリントアウトする。
【００２８】
なお、以上の処理は、受注伝票印刷処理の場合についての説明であるが、これに限定する趣旨でないのは当然である。
図４は、本実施例に係る機能情報１の例を説明する図である。
【００２９】
本実施例で使用する機能情報１は、各機能毎（受注伝票印刷、売上伝票印刷など）に割り当てられる機能ＩＤ（ＩＤ−００１、ＩＤ−００２など）を備えている。機能ＩＤ毎に動的ＳＱＬ自動生成エンジンによってＳＱＬ文が生成される。
【００３０】
図５は、本実施例に係るＤＢテーブル情報２の例を説明する図である。
同図に示すＤＢテーブル情報２は、図４で示した機能ＩＤと、生成するＳＱＬ文の単位を示すクエリＮｏと、各機能ＩＤに応じて必要となるＤＢテーブルの表番号と、各表番号のＤＢテーブルが副問い合せに使用するＤＢテーブルであるか否かを識別する表区分と、各表区分を分類して識別するための表分類と、各表番号のＤＢテーブルの名称である表名称と、各表番号のＤＢテーブルの物理ＩＤである表物理ＩＤと、表物理ＩＤに論理ＩＤを割り当てた場合の表論理ＩＤと、副問い合せで使用する場合のクエリＮｏ（サブクエリＮｏ）である内部クエリＮｏと、内部クエリの結合先を示す結合先クエリＮｏと、条件式生成時に当該ＤＢテーブルに関する条件（右辺部）と結合する条件式（左辺部）に使用するＤＢテーブルを示す結合先表番号と、結合の種類を示す結合区分と、を備えている。
【００３１】
なお、同図に示す表区分は、０の場合に実表（サブクエリなし）を示し、１の場合にサブクエリを使用することを示すが、これに限定する趣旨ではなく両者が識別可能な値であればよい。
【００３２】
また、同図に示した表区分、及び結合区分に示した括弧内の文字は、本実施例に係るＳＱＬ文生成処理に使用するものではなく、理解を容易にするために付加したものである。
図６は、本実施例に係る項目情報３の例を説明する図である。
【００３３】
同図に示す項目情報３は、図４で示した機能ＩＤと、生成するＳＱＬ文の単位を示すクエリＮｏと、各機能ＩＤに応じて必要となる項目を識別するカラムＮｏと、各カラムＮｏの項目を抽出する元となるＤＢテーブルの表番号である取得元表番号と、取得元表番号のカラムを示す抽出カラム物理ＩＤと、抽出カラム物理ＩＤに論理ＩＤを割り当てた場合の抽出カラム論理ＩＤと、検索結果をソートする場合の順番を設定するソートキーと、検索結果に対してグループ分けやグループ化を行なう場合に設定するグループキーと、を備えている。
【００３４】
図７は、本実施例に係る条件情報４の例を説明する図である。
同図に示す条件情報４は、図４で示した機能ＩＤと、生成するＳＱＬ文の単位を示すクエリＮｏと、ＷＨＥＲＥ句等を生成するために必要となる表番号と、各機能ＩＤに応じて必要となる条件を識別する条件番号と、従属条件生成時の従属先を示す従属条件番号と、条件式の演算子を示す条件演算子タイプと、結合元の列名を示す結合元列名と、各条件番号の条件に必要なＤＢテーブルのカラムを示す結合元列物理ＩＤと、条件式の左辺で使用する関数を示す関数使用区分１と、そのパラメータを格納する関数補足１と、比較する値を設定する比較値タイプと、その比較に使用する符号を設定する比較タイプと、結合先の列名を示す結合先列名と、結合先列名の物理ＩＤを示す結合先列物理ＩＤと、条件式の右辺で使用する関数を示す関数使用区分２と、そのパラメータを格納する関数補足２と、使用するパラメータの番号を示すパラメータ番号と、条件の右辺に設定する固定の条件値である固定値(ＷＨＥＲＥ句の条件式の右辺にそのままセットする値)と、条件式が必須であるかを示す必須条件フラグと、副問い合せで使用する場合のクエリＮｏ（サブクエリＮｏ）である内部クエリＮｏと、を備えている。
【００３５】
ここで、同図に示した条件演算子タイプは、０の場合に演算子「ＡＮＤ」を示し、１の場合に演算子「ＯＲ」を示している。また、比較値タイプは、０の場合に「パラメータ」、１の場合に「固定」、２の場合に「結合」を示している。
【００３６】
比較タイプは、０の場合に比較タイプ「＝」、２の場合に比較タイプ「≧」、４の場合に比較タイプ「≦」を示している。
必須条件フラグは、０の場合に「任意」であることを示し、１の場合に「必須」であることを示している。
【００３７】
同図に示す固定値は、例えば、機能ＩＤ＝「ＩＤ−００１」の場合には、受注伝票の印刷が未処理（未出力）のデータに対して印刷処理を実施する条件を付加する場合に０を設定する。また、機能ＩＤに応じて、例えば、固定値に“営業”が入力されている場合にＷＨＥＲＥ句の条件式の右辺に値をそのままセットし、条件式「ＢＵＭＯＮ='営業'」を生成する。
【００３８】
以上に説明した条件演算子タイプ、比較値タイプ、比較タイプ、必須条件フラグ、及び固定値については、図５又は図７に示した値に限定する趣旨ではなく、適宜適当な値を使用すればよい。
【００３９】
また、同図に示した表区分、及び結合区分に示した括弧内の文字は、本実施例に係るＳＱＬ文生成処理に使用するものではなく、理解を容易にするために付加したものである。
また、図４に示した各機能ＩＤの機能名称と、図５に示した各表番号のＤＢテーブルの名称である表名称と、図６に示した各項目の名称を示す項目名と抽出カラムの名称を示す抽出カラム名と、図７に示した結合元の列名を示す結合元列名と結合先の列名を示す結合先列名、は理解を容易とするために記載したものであるので、機能情報１、テーブル情報２、項目情報３、及び条件情報４として必須な情報ではない。
【００４０】
以上に説明した図４〜図７の機能情報１、ＤＢテーブル情報２、項目情報３、及び条件情報４は、通常、設計仕様書等に記載される事項であるので、例えば、表計算ソフト等を用いて設計仕様書等から直接生成してもよい。
【００４１】
図８は、本実施例に係る動的ＳＱＬ自動生成エンジンの処理の概要を示すフローチャートである。
動的ＳＱＬ自動生成エンジン１２を使用するアプリケーション等から起動ＩＦ１３を介して機能ＩＤ（以下、「特定機能ＩＤ」という）、及び条件値（例えば、図３に示した伝票受付開始日付、伝票受付終了日時）が送られると共に、動的ＳＱＬ自動生成エンジン１２が起動されると、ＳＱＬ文生成処理が開始される（ステップＳ８００）。
【００４２】
ステップＳ８０１において、動的ＳＱＬ自動生成エンジン１２は、特定機能ＩＤをキーとして、データベースに格納されているＤＢテーブル情報２、項目情報３、及び条件情報４から特定機能ＩＤに対応した（関連付けられた）データを抽出する。
【００４３】
ステップＳ８０２において、ステップＳ８０１の処理で特定機能ＩＤに対応するデータが抽出できなかった場合には、処理をステップＳ８０９に移行して終了する。また、ステップＳ８０２において、ステップＳ８０１の処理で特定機能ＩＤに対応するデータが抽出できた場合には、さらに、以降の処理によって生成するＳＱＬ文のクエリＮｏ（以下、「特定クエリＮｏ」という）を、Ｓ８０１にて抽出したデータを番号順にソートし、抽出データの先頭に初期化し、処理をステップＳ８０３に移行する。
【００４４】
ステップＳ８０３において、ＳＥＬＥＣＴ句生成処理部６は、ＤＢテーブル情報２及び項目情報３を参照し、特定機能ＩＤに応じたＤＢテーブルの項目を取得してＳＥＬＥＣＴ句を生成する。
【００４５】
ＳＥＬＥＣＴ句の生成処理が異常終了した場合には、処理をステップＳ８０９に移行してＳＱＬ文生成処理を終了する。また、ＳＥＬＥＣＴ句の生成処理が正常終了した場合には、処理をステップＳ８０４に移行する。
【００４６】
ステップＳ８０４において、ＦＲＯＭ句生成処理部７は、ＤＢテーブル情報２を参照し、特定機能ＩＤに応じたＤＢテーブル名を取得してＦＲＯＭ句を生成する。
ＦＲＯＭ句の生成処理が異常終了した場合には、処理をステップＳ８０９に移行してＳＱＬ文生成処理を終了する。また、ＦＲＯＭ句の生成処理が正常終了した場合には、処理をステップＳ８０５に移行する。
【００４７】
ステップＳ８０５において、ＷＨＥＲＥ句生成処理部８は、ＤＢテーブル情報２及び条件情報４を参照し、機能ＩＤに該当する条件を取得してＷＨＥＲＥ句を生成する。
ＷＨＥＲＥ句の生成処理が異常終了した場合には、処理をステップＳ８０９に移行してＳＱＬ文生成処理を終了する。また、ＷＨＥＲＥ句の生成処理が正常終了した場合には、処理をステップＳ８０６に移行する。
【００４８】
ステップＳ８０６において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３を参照し、ＧＲＯＵＰ  ＢＹ部生成の設定が有る場合には、該当する項目を抽出してＧＲＯＵＰ  ＢＹ句を生成する。
【００４９】
ＧＲＯＵＰ  ＢＹ句の生成処理が異常終了した場合には、処理をステップＳ８０９に移行してＳＱＬ文生成処理を終了する。また、ＧＲＯＵＰ  ＢＹ句の生成処理が正常終了した場合には、処理をステップＳ８０７に移行する。
【００５０】
ステップＳ８０７において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、項目情報３を参照し、ＯＲＤＥＲ  ＢＹ句生成の設定が有る場合には、該当する項目を抽出してＯＲＤＥＲ  ＢＹ句を生成する。
【００５１】
ＯＲＤＥＲ  ＢＹ句の生成処理が異常終了した場合には、処理をステップＳ８０９に移行してＳＱＬ文生成処理を終了する。また、ＯＲＤＥＲ  ＢＹ句の生成処理が正常終了した場合には、処理をステップＳ８０８に移行する。
【００５２】
ステップＳ８０８において、ＳＱＬ文生成処理部９は、ステップＳ８０３からＳ８０７の処理によって生成された句を結合してＳＱＬ文を生成する。そして、処理をステップＳ８０９に移行してＳＱＬ文生成処理を終了する。
【００５３】
以下、ステップＳ８０３〜Ｓ８０７に示した処理について、図９から図１５に基づいて説明する。
図９は、図８に示したステップＳ８０３におけるＳＥＬＥＣＴ句生成処理を示すフローチャートである。
【００５４】
図８に示したステップＳ８０２からステップＳ８０３に処理が移行すると、ＳＥＬＥＣＴ句生成処理部６は、以降の処理対象である項目のカラムＮｏ（以下、「特定カラムＮｏ」という）を抽出データの先頭に初期化してＳＥＬＥＣＴ句生成処理を開始する（ステップＳ９００）。
【００５５】
ステップＳ９０１において、ＳＥＬＥＣＴ句生成処理部６は、項目情報３を参照し、特定機能ＩＤ（例えば、ＩＤ−００１）における特定カラムＮｏの取得元表番号（例えば、１）と抽出カラム物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）を取得する。さらに、ＤＢテーブル情報２の所定のアドレスに格納されている表番号を順次参照し、取得した取得元表番号に該当する表番号を検索する。
【００５６】
該当する表番号が検出されなかった場合には、ＳＥＬＥＣＴ句生成処理部６は、処理をステップＳ９１２に移行して異常終了し、該当する表番号が検出された場合には、処理をステップＳ９０２に移行する。
【００５７】
ステップＳ９０２において、ＳＥＬＥＣＴ句生成処理部６は、ＤＢテーブル情報２を参照し、ステップＳ９０１で検出した表番号（例えば、１）に対応する表論理ＩＤを検索する。そして、表論理ＩＤを検出した場合には表論理ＩＤ（例えば、Ｏ＿Ｈ）を取得し、処理をステップＳ９０３に移行する。また、表論理ＩＤを検出しない場合には、表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）を取得して処理をステップＳ９０４に移行する。
【００５８】
ステップＳ９０３において、ＳＥＬＥＣＴ句生成処理部６は、ステップＳ９０１で取得した抽出カラム物理ＩＤと、ステップＳ９０２で取得した表論理ＩＤと、を文字”．（ドット）”によって結合してカラム文字列１（例えば、Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ）を生成する。
【００５９】
同様に、ステップＳ９０４において、ＳＥＬＥＣＴ句生成処理部６は、ステップＳ９０１で取得した抽出カラム物理ＩＤと、ステップＳ９０２で取得した表物理ＩＤと、を文字”．（ドット）”によって結合してカラム文字列１（例えば、ＯＲＤＥＲ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ）を生成する。
【００６０】
ステップＳ９０３またはステップＳ９０４によってカラム文字１の生成処理が完了すると、ＳＥＬＥＣＴ句生成処理部６は、処理をステップＳ９０５に移行する。そして、項目情報３を参照し、特定カラムＮｏに対応する抽出カラム論理ＩＤを検索する。
【００６１】
抽出カラム論理ＩＤが存在しない場合には処理をステップＳ９０７に移行し、抽出カラム論理ＩＤが存在する場合には、抽出カラム論理ＩＤを取得してステップＳ９０６に処理を移行する。
【００６２】
ステップＳ９０６において、ＳＥＬＥＣＴ句生成処理部６は、ステップＳ９０３またはステップＳ９０４の処理によって生成したカラム文字１と、ステップＳ９０５の処理で取得した抽出カラム論理ＩＤと、を”  （スペース）”によって結合してカラム文字２を生成し、処理をステップＳ９０７に移行する。
【００６３】
例えば、図４に示した項目情報３の特定カラムＮｏが１の抽出カラム論理ＩＤには「Ｓ＿ＤＡＴＥ」が設定されているので、カラム文字列２「Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ  Ｓ＿ＤＡＴＥ」が生成される。
【００６４】
ステップＳ９０７において、ＳＥＬＥＣＴ句生成処理部６は、項目情報３の特定機能ＩＤにおける全てのカラムＮｏについてカラム文字列（カラム文字列１又はカラム文字列２）の生成処理が終了したかを判別し、終了していない場合には、処理をステップＳ９０８に移行する。
【００６５】
ステップＳ９０８において、ＳＥＬＥＣＴ句生成処理部６は、ステップＳ９０６で生成したカラム文字２に”，（カンマ）”を付加し、さらに、ステップＳ９０９において、特定カラムＮｏを抽出データの次の項目へ移行して（次の項目名に設定して）、処理をステップＳ９０１に移行する。
【００６６】
そして、以上に説明したステップＳ９０１からＳ９０９の処理を特定機能ＩＤにおける全カラムＮｏについて行なうこととなる。
また、ステップＳ９０７において、全てのカラムＮｏについて処理が終了した場合には、処理をステップＳ９１０に移行し、ステップＳ９０１からステップＳ９０９で生成したすべてのカラム文字列（カラム文字列１又はカラム文字列２）を結合して１つの文字列を生成する。
【００６７】
例えば、図５に示したＤＢテーブル情報２及び図６に示した項目情報３における特定機能ＩＤ：ＩＤ−００１についてステップＳ９０１からＳ９１０の処理を行なうことによって、文字列「Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ  Ｓ＿ＤＡＴＥ，Ｏ＿Ｈ．ＳＬＩＰ＿ＮＯ，Ｏ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ，Ｏ＿Ｍ．ＣＵＳＴＯＭＥＲ＿ＮＡＭＥ，Ｏ＿Ｂ．ＤＥＴＡＩＬ＿ＮＯ，Ｏ＿Ｂ．ＩＴＥＭ＿ＩＤ，Ｏ＿Ｍ．ＩＴＥＭ＿ＮＡＭＥ，Ｏ＿Ｂ．ＱＵＡＮＴＩＴＹ，Ｏ＿Ｂ．ＵＮＩＴ＿ＰＲＩＣＥ，Ｏ＿Ｂ． ＤＥＴＡＩＬ＿ＰＲＩＣＥ，Ｏ＿Ｂ．ＤＥＴＡＩＬ＿ＴＡＸ，Ｏ＿Ｈ．ＴＯＴＡＬ＿ＰＲＩＣＥ，Ｏ＿Ｈ．ＴＯＴＡＬ＿ＴＡＸ，Ｏ＿Ｂ．ＰＲＩＣＥ」を生成する。
【００６８】
さらに、ＳＥＬＥＣＴ句生成処理部６は、ステップＳ９１１において、ステップＳ９１０で生成した文字列の先頭に「ＳＥＬＥＣＴ」を付加し、ＳＥＬＥＣＴ句を生成して処理を終了する（ステップＳ９１２）。
【００６９】
例えば、ステップＳ９１０で例示した文字列からＳＥＬＥＣＴ句「ＳＥＬＥＣＴ  Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ  Ｓ＿ＤＡＴＥ，Ｏ＿Ｈ．ＳＬＩＰ＿ＮＯ，Ｏ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ，Ｏ＿Ｍ．ＣＵＳＴＯＭＥＲ＿ＮＡＭＥ，Ｏ＿Ｂ．ＤＥＴＡＩＬ＿ＮＯ，Ｏ＿Ｂ．ＩＴＥＭ＿ＩＤ，Ｏ＿Ｍ．ＩＴＥＭ＿ＮＡＭＥ，Ｏ＿Ｂ．ＱＵＡＮＴＩＴＹ，Ｏ＿Ｂ．ＵＮＩＴ＿ＰＲＩＣＥ，Ｏ＿Ｂ． ＤＥＴＡＩＬ＿ＰＲＩＣＥ，Ｏ＿Ｂ．ＤＥＴＡＩＬ＿ＴＡＸ，Ｏ＿Ｈ．ＴＯＴＡＬ＿ＰＲＩＣＥ，Ｏ＿Ｈ．ＴＯＴＡＬ＿ＴＡＸ，Ｏ＿Ｂ．ＰＲＩＣＥ」が生成される。
【００７０】
図１０は、図８に示したステップＳ８０４におけるＦＲＯＭ句生成処理を示すフローチャートである。
図８に示したステップＳ８０３からステップＳ８０４に処理が移行すると、ＦＲＯＭ句生成処理部７は、以降の処理の処理対象であるＤＢテーブルの表番号（以下、「特定表番号」という）を抽出データの先頭に初期化してＦＲＯＭ句生成処理を開始する（ステップＳ１０００）。
【００７１】
ステップＳ１００１において、ＦＲＯＭ句生成処理部７は、ＤＢテーブル情報２を参照し、特定機能ＩＤ（例えば、ＩＤ−００１）における特定表番号（例えば、１）の表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）を取得し、さらに、取得した表物理ＩＤに対応する表論理ＩＤを検索する。
【００７２】
そして、該当する表論理ＩＤ（Ｏ＿Ｈ）が存在する場合には、当該表論理ＩＤを取得して処理をステップＳ１００２に移行し、当該表論理ＩＤが存在しない場合には、処理をステップＳ１００３に移行する。
【００７３】
ステップＳ１００２において、ＦＲＯＭ句生成処理部７は、ステップＳ１００１で取得した表物理ＩＤと表論理ＩＤとを”  （スペース）”によって結合して抽出テーブル文字列（例えば、ＯＲＤＥＲ＿Ｈ  Ｏ＿Ｈ）を生成し、処理をステップＳ１００４に移行する。
【００７４】
また、ステップＳ１００３において、ＦＲＯＭ句生成処理部７は、ステップＳ１００１で取得した表物理ＩＤを抽出テーブル文字列として設定し、処理をステップＳ１００４に移行する。
【００７５】
ステップＳ１００４において、ＦＲＯＭ句生成処理部７は、ＤＢテーブル情報２を参照し、特定機能ＩＤにおける全ての表番号について抽出テーブル文字列の生成処理が終了したかを判別する。
【００７６】
抽出テーブル文字列の生成処理が終了していない場合には、処理をステップＳ１００５に移行し、ステップＳ１００２又はステップＳ１００３で生成した抽出テーブル文字列に”，（カンマ）”を付加し、さらに、ステップＳ１００６において、特定表番号を抽出データの次の項目へ移行して処理をステップＳ１００１に移行する。そして、ＤＢテーブル情報２の特定機能ＩＤにおける全ての表番号についてステップＳ１００１からＳ１００６の抽出テーブル文字列生成処理を行なう。
【００７７】
また、抽出テーブル文字列生成処理が終了すると、ＦＲＯＭ句生成処理部７は、処理をステップＳ１００７に移行し、ステップＳ１００１からＳ１００６の処理によって生成した全ての抽出テーブル文字列を結合して１つの文字列を生成する。
【００７８】
例えば、図５に示したＤＢテーブル情報２における特定機能ＩＤ：ＩＤ−００１についてステップＳ１００１〜Ｓ１００７の処理を行なうことによって、文字列「ＯＲＤＥＲ＿Ｈ  Ｏ＿Ｈ，ＯＲＤＥＲ＿Ｂ  Ｏ＿Ｂ，ＣＵＳＴＯＭＥＲ＿ＭＳＴ  Ｃ＿Ｍ，ＩＴＥＭ＿ＭＳＴ  Ｉ＿Ｍ」が生成される。
【００７９】
さらに、ＦＲＯＭ句生成処理部７は、ステップＳ１００８において、ステップＳ１００７で生成した文字列の先頭に「ＦＲＯＭ」を付加し、ＦＲＯＭ句を生成して処理を終了する（ステップＳ１００９）。
【００８０】
例えば、ステップＳ１００７で示した文字列からＦＲＯＭ句「ＦＲＯＭ  ＯＲＤＥＲ＿Ｈ  Ｏ＿Ｈ，ＯＲＤＥＲ＿Ｂ  Ｏ＿Ｂ，ＣＵＳＴＯＭＥＲ＿ＭＳＴ  Ｃ＿Ｍ，ＩＴＥＭ＿ＭＳＴ  Ｉ＿Ｍ」が生成される。
【００８１】
図１１は、図８に示したステップＳ８０５におけるＷＨＥＲＥ句生成処理を示すフローチャートである。
図８に示したステップＳ８０４からステップＳ８０５に処理が移行すると、ＷＨＥＲＥ句生成処理部８は、以降の処理対象の条件番号（以下、「特定条件番号」という）を抽出データの先頭に初期化してＷＨＥＲＥ句生成処理を開始する（ステップＳ１１００）。
【００８２】
ステップＳ１１０１において、ＷＨＥＲＥ句生成処理部８は、ＤＢテーブル情報２及び条件情報４に基づいて条件式の左辺と比較等の演算子部分の文字列（以下、「左辺文字列」という）を生成する。
【００８３】
左辺文字列の生成処理が異常終了した場合には、処理をステップＳ１１０８に移行して終了する。また、ステップＳ１１０１において、左辺文字列の生成処理が正常に終了した場合には、処理をステップＳ１１０２に移行して、条件式の右辺の文字列（以下、右辺文字列という）を生成する。
【００８４】
右辺文字列の生成処理が異常終了した場合には、処理をステップＳ１１０８に移行して終了し、右辺文字列の生成処理が正常に終了した場合には、処理をステップＳ１１０３に移行し、ステップＳ１１０１で生成した左辺文字列とステップＳ１１０２で生成した右辺文字列とを結合して条件文字列を生成する。
【００８５】
ステップＳ１１０４において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照し、特定機能ＩＤにおける全ての条件番号についてステップＳ１１０１からＳ１１０５の条件文字列生成処理が終了したかを判別する。そして、全ての条件番号について条件文字列生成処理が終了していない場合には、処理をステップＳ１１０５に移行し、特定条件番号を抽出データの次の項目へ移行して（次の条件番号を処理対象に設定して）処理をステップＳ１１０１に移行する。
【００８６】
そして、条件情報４の特定機能ＩＤにおける全ての条件番号について条件文字列生成処理を行なうこととなる。
また、条件文字列生成処理が終了すると、ＷＨＥＲＥ句生成処理部８は、処理をステップＳ１１０６に移行する。そして、ステップＳ１１０１からＳ１１０５の条件文字列生成処理で生成した全ての条件文字列を結合して１つの文字列を生成し、ステップＳ１１０７に処理を移行する。
【００８７】
例えば、図７に示した条件情報４における特定機能ＩＤ：ＩＤ−００１についてステップＳ１１０１〜Ｓ１１０６の処理を行なうことによって、文字列「Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ＜＝’パラメータ値’  ＡＮＤ  Ｏ＿Ｈ．ＰＲＴ＿ＦＬＧ＝’０’  ＡＮＤ  Ｏ＿Ｂ．ＳＬＩＰ＿ＮＯ＝Ｏ＿Ｈ．ＳＬＩＰ＿ＮＯ  ＡＮＤ  Ｃ＿Ｍ．ＣＵＳＴＯＭＥＲ＿ＩＤ＝Ｏ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ  ＡＮＤ  Ｉ＿Ｍ．ＩＴＥＭ＿ＩＤ＝Ｏ＿Ｂ．ＩＴＥＭ＿ＩＤ」が生成される。
【００８８】
ステップＳ１１０７において、ＷＨＥＲＥ句生成処理部８は、ステップＳ１１０６で生成した文字列の先頭に「ＷＨＥＲＥ」を付加してＷＨＥＲＥ句を生成し処理を終了する（ステップＳ１１０８）。
【００８９】
例えば、ステップＳ１１０６で示した文字列からＷＨＥＲＥ句「ＷＨＥＲＥ  Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ＜＝’パラメータ値’  ＡＮＤ  Ｏ＿Ｈ．ＰＲＴ＿ＦＬＧ＝’０’  ＡＮＤ  Ｏ＿Ｂ．ＳＬＩＰ＿ＮＯ＝Ｏ＿Ｈ．ＳＬＩＰ＿ＮＯ  ＡＮＤ  Ｃ＿Ｍ．ＣＵＳＴＯＭＥＲ＿ＩＤ＝Ｏ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ  ＡＮＤ  Ｉ＿Ｍ．ＩＴＥＭ＿ＩＤ＝Ｏ＿Ｂ．ＩＴＥＭ＿ＩＤ」が生成される。
【００９０】
図１２は、図１１におけるステップＳ１１０１の左辺文字列生成処理のフローチャートを示している。
図１１に示したステップＳ１１０１において、ＷＨＥＲＥ句生成処理部８が左辺文字列生成処理を開始すると（ステップＳ１２００）、処理をステップＳ１２０１に移行し、条件情報４の特定条件番号における表番号を参照して取得する（例えば、１）。
【００９１】
そして、ＤＢテーブル情報２を参照して該当する表番号を検索し、検出した場合には処理をステップＳ１２０２に移行する。また、該当する表番号を検出しない場合には、処理をステップＳ１２０６に移行して処理を終了（異常終了）する。
【００９２】
ステップＳ１２０２において、ＷＨＥＲＥ句生成処理部８は、ＤＢテーブル情報２を参照し、ステップＳ１２０１で取得した表番号に対応する表論理ＩＤ（例えば、表番号「１」に対応する表論理ＩＤ「Ｏ＿Ｈ」）を検索する。
【００９３】
そして、該当する表論理ＩＤが存在する場合には、ステップＳ１２０３において、条件情報４を参照して特定条件番号に対応する結合元列物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）を取得し、ステップＳ１２０２で取得した表論理ＩＤ（例えば、Ｏ＿Ｈ）と文字”．（ドット）”で結合して条件文字列を生成する。そして、処理をステップＳ１２０５に移行する。
【００９４】
一方、該当する表論理ＩＤが存在しない場合には、ステップＳ１２０１で取得した表番号に対応する表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）を取得して処理をステップＳ１２０４に移行する。
【００９５】
ステップＳ１２０４では、条件情報４を参照して、特定条件番号に対応する結合元列物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）を取得し、ステップＳ１２０２で取得した表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）と文字”．（ドット）”で結合して条件文字列を生成する。そして、処理をステップＳ１２０５に移行する。
【００９６】
ステップＳ１２０５において、条件情報４を参照して、特定条件番号に対応する比較タイプ（例えば、＞＝）を取得し、ステップＳ１２０３、又はＳ１２０４の処理で生成した条件文字列に付加して左辺文字列を生成する。
【００９７】
例えば、特定条件番号が１の場合、上述したステップＳ１２０１〜Ｓ１２０５の処理によって、左辺文字列「Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ  ＞＝」を生成することとなる。
図１３は、図１１におけるステップＳ１１０２の右辺文字列生成処理のフローチャートを示している。
【００９８】
図１１に示したステップＳ１１０２において、ＷＨＥＲＥ句生成処理部８が右辺文字列生成処理を開始すると（ステップＳ１３００）、処理をステップＳ１３０１に移行し、特定条件番号に対応する比較値タイプ（例えば、比較値タイプがパラメータであることを示す値０）を取得する。
【００９９】
そして、取得した比較タイプがパラメータの場合には、処理をステップＳ１３０２に移行し、比較タイプが固定値である場合には、処理をステップＳ１３０６に移行する。
ステップＳ１３０２において、ＷＨＥＲＥ句生成処理部８は、条件情報４における特定条件番号の必須条件フラグを参照し、必須条件フラグが必須条件を示す値１である場合には、処理をステップＳ１３０３に移行し、必須条件フラグが任意条件を示す値０である場合には、処理をステップＳ１３０４に移行する。
【０１００】
ステップＳ１３０３において、ＷＨＥＲＥ句生成処理部８は、条件情報４のパラメータ番号を参照し、このパラメータ番号と起動ＩＦ１３を介して動的ＳＱＬ自動生成エンジン１２に渡されたパラメータの順番とが一致するパラメータがあるかを判別し、当該パラメータがある場合には、処理をステップＳ１３０５に移行して当該パラメータを文字列とする右辺文字列を生成する。
【０１０１】
例えば、図３に示した例では、パラメータが「機能ＩＤ（パラメータ番号０）」「伝票受付開始日（パラメータ番号１）」、「伝票受付終了日（パラメータ番号２）」の順に受注伝票印刷アプリケーションから動的ＳＱＬ自動生成エンジン１２に渡される。また、図７に示した条件番号１のパラメータ番号は１に設定されているので、ステップＳ１３０５の処理によって、「伝票受付開始日（例えば、２００４０９１３）」を文字列とする右辺文字列を生成する。
【０１０２】
また、当該パラメータが存在しない場合、当該パラメータを使用した右辺文字列生成処理は必須であるので、ステップＳ１３１４に処理を移行して異常終了する。
一方、ステップＳ１３０４においても、ステップＳ１３０３と同様に、ＷＨＥＲＥ句生成処理部８が、条件情報４のパラメータ番号を参照し、このパラメータ番号と起動ＩＦ１３を介して動的ＳＱＬ自動生成エンジン１２に渡されたパラメータの順番とが一致するパラメータがあるかを判別し、当該パラメータがある場合には、処理をステップＳ１３０５に移行して当該パラメータを文字列とする右辺文字列を生成する。
【０１０３】
また、当該パラメータが存在しない場合、ステップＳ１３１４に処理を移行して右辺文字列を生成することなく正常終了する。
したがって、動的ＳＱＬ自動生成エンジン１２からのパラメータ（条件）に応じてＷＨＥＲＥ句（例えば、右辺文字列等）を生成することが可能となる。
【０１０４】
一方、ステップＳ１３０６において、ＷＨＥＲＥ句生成処理部８は、ステップＳ１３０１で取得した比較タイプが固定値である場合には、処理をステップＳ１３０７に移行し、比較タイプが固定値でない場合には、処理をステップＳ１３０８に移行する。  ステップＳ１３０７において、ＷＨＥＲＥ句生成処理部８は、条件情報４の固定値を参照して当該固定値（例えば、未出力を表す値０）を取得する。そして、取得した固定値を文字列に変換して右辺文字列を生成して処理を終了する（ステップＳ１３１４）。
【０１０５】
ステップＳ１３０８において、ＷＨＥＲＥ句生成処理部８は、ステップＳ１３０１で取得した比較タイプが結合である場合に、処理をステップＳ１３０９に移行し、条件文字列の結合処理を行なう。また、比較タイプが結合でない場合には、ステップＳ１３１４に処理を移行して異常終了する。
【０１０６】
ステップＳ１３０９において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照して特定条件番号の表番号を取得し（例えば、条件番号４の表番号２）、さらに、ＤＢテーブル情報２の特定機能ＩＤにおいて当該表番号を検索する。
【０１０７】
そして、該当する表番号を検出した場合には、処理をステップＳ１３１０に移行し、該当する表番号を検出しない場合には、処理をステップＳ１３１４に移行して異常終了する。
【０１０８】
ステップＳ１３１０において、ＷＨＥＲＥ句生成処理部８は、ＤＢテーブル情報２を参照して、ステップＳ１３０９で検出した表番号（例えば、表番号２）に対応する結合先表番号（例えば、結合先表番号１）を取得する。そして、ステップＳ１３１１に処理を移行して、ステップＳ１３１０で検出した結合先表番号（例えば、結合先表番号１）に対応する表論理ＩＤを検索する。
【０１０９】
検索の結果、表論理ＩＤを検出した場合には、検出した表論理ＩＤ（例えば、Ｏ＿Ｈ）を取得して処理をステップＳ１３１２に移行し、表論理ＩＤを検出しない場合には、ステップＳ１３１０で検出した結合先表番号に対応する表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）を取得して処理をステップＳ１３１３に移行する。
【０１１０】
ステップＳ１３１２において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照して特定条件番号に対応する結合先列物理ＩＤ（例えば、ＳＬＩＰ＿ＮＯ）を取得し、ステップＳ１３１１で取得した表論理ＩＤと文字”．”で結合して右辺文字列（例えば、Ｏ＿Ｈ．ＳＬＩＰ＿ＮＯ）を生成する。
【０１１１】
ステップＳ１３１３において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照して特定条件番号に対応する結合先列物理ＩＤ（例えば、ＳＬＩＰ＿ＮＯ）を取得し、ステップＳ１３１１で取得した表物理ＩＤとを文字”．”で結合して右辺文字列を生成する。
【０１１２】
図１４は、図８に示したステップＳ８０６におけるＧＲＯＵＰ  ＢＹ句生成処理を示すフローチャートである。
図８に示したステップＳ８０５からステップＳ８０６に処理が移行すると、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、ＧＲＯＵＰ  ＢＹ句生成処理を開始する（ステップＳ１４００）。
【０１１３】
ステップＳ１４０１において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３を参照し、特定機能ＩＤにおけるグループキーを検索する。そして、グループキーを検出すると、処理をステップＳ１４０２に移行し、ステップＳ１４０１で検出したグループキーに対応する取得元表番号を取得する。
【０１１４】
さらに、ステップＳ１４０２において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、ＤＢテーブル情報２の特定機能ＩＤにおける表番号を参照し、取得した取得元表番号と一致する表番号を検索する。
【０１１５】
検索の結果、取得元表番号と一致する表番号を検出した場合には、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、処理をステップＳ１４０３に移行し、ＤＢテーブル情報２を参照して、検出した表番号に対応する表論理ＩＤがあるかチェックする。
【０１１６】
ステップＳ１４０３において、該当する表論理ＩＤがある場合には、当該論理ＩＤを取得して処理をステップＳ１４０４に移行し、該当する表論理ＩＤがない場合には、ステップＳ１４０２で検出した表番号に対応する表物理ＩＤを取得して処理をステップＳ１４０５に移行する。
【０１１７】
ステップＳ１４０４において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３を参照して抽出カラム物理ＩＤを取得し、ステップＳ１４０３で取得した表論理ＩＤと文字”．”で結合してグループ文字列を生成する。
【０１１８】
また、ステップＳ１４０５において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３を参照して抽出カラム物理ＩＤを取得し、ステップＳ１４０３で取得した表物理ＩＤと文字”．”で結合してグループ文字列を生成する。
【０１１９】
以上のステップＳ１４０４、又はＳ１４０５の処理によってグループ文字列が生成されると、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、処理をステップＳ１４０６に移行して項目情報３を参照し、他にグループキーの設定があるかをチェックする。そして、他にグループキーの設定を検出すると、処理をステップＳ１４０７に移行して、検出したカラムＮｏについて、ステップＳ１４０１〜ステップＳ１４０７の処理を繰り返す。
【０１２０】
また、ステップＳ１４０６において、特定機能ＩＤにおける全てのカラムＮｏについて処理が終了すると、処理をステップＳ１４０８に移行し、ステップＳ１４０１〜Ｓ１４０７で生成した全てのグループ文字列を、グループキーに設定された値の昇順に文字”，（カンマ）”によって結合して１つの文字列を生成する。
【０１２１】
そして、ステップＳ１４０９において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、ステップＳ１４０８で生成した文字列の先頭に「ＧＲＯＵＰ  ＢＹ」を付加してＧＲＯＵＰ  ＢＹ句を生成し処理を終了する（ステップＳ１４１０）。
【０１２２】
なお、図５〜図７に示したＤＢテーブル情報２、項目情報３、及び条件情報４は、ＧＲＯＵＰ  ＢＹ句を生成するための設定がされていないため、より具体的な例については、図３２〜図３４に基づいて説明する。
【０１２３】
図１５は、図８に示したステップＳ８０７におけるＯＲＤＥＲ  ＢＹ句生成処理を示すフローチャートである。
図８に示したステップＳ８０６からステップＳ８０７に処理が移行すると、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ＯＲＤＥＲ  ＢＹ句生成処理を開始する（ステップＳ１５００）。
【０１２４】
ステップＳ１５０１において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、項目情報３を参照し、特定機能ＩＤにおけるソートキーを検索する。そして、ソートキー（例えば、カラムＮｏ１のソートキー１）を検出すると、処理をステップＳ１５０２に移行し、ステップＳ１５０１で検出したソートキーに対応する取得元表番号を取得する。
【０１２５】
さらに、ステップＳ１５０２において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ＤＢテーブル情報２の特定機能ＩＤにおける表番号を参照し、取得した取得元表番号と一致する表番号を検索する。
【０１２６】
検索の結果、取得元表番号と一致する表番号を検出すると、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、処理をステップＳ１５０３に移行し、ＤＢテーブル情報２を参照して、検出した表番号に対応する表論理ＩＤがあるかチェックする。
【０１２７】
ステップＳ１５０３において、該当する表論理ＩＤがある場合には、当該表論理ＩＤ（例えば、Ｏ＿Ｈ）を取得して処理をステップＳ１５０４に移行し、該当する表論理ＩＤがない場合には、表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）を取得して処理をステップＳ１５０７に移行する。
【０１２８】
ステップＳ１５０４において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、項目情報３を参照し、ステップＳ１５０１で検出したソートキーが設定されたカラムＮｏの抽出カラム論理ＩＤの有無をチェックし、該当する抽出カラム論理ＩＤがある場合には、抽出カラム論理ＩＤ（例えば、Ｓ＿ＤＡＴＥ）を取得して処理をステップＳ１５０５に移行する。また、該当する抽出カラム論理ＩＤがない場合には、抽出カラム物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）を取得して処理をステップＳ１５０６に移行する。
【０１２９】
ステップＳ１５０５において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ステップＳ１５０４で取得した抽出カラム論理ＩＤ（例えば、Ｓ＿ＤＡＴＥ）をソート文字列（例えばＳ＿ＤＡＴＥ）とする。
【０１３０】
また、ステップＳ１５０６において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ステップＳ１５０３で取得した表論理ＩＤ（例えば、Ｏ＿Ｈ）と、ステップＳ１５０４で取得した抽出カラム物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）と、を文字”．”で結合してソート文字列（例えば、Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ）を生成する。
【０１３１】
一方、ステップＳ１５０７において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、項目情報３を参照し、ステップＳ１５０１で検出したソートキーが設定された項目名に対応する抽出カラム論理ＩＤの有無をチェックし、該当する抽出カラム論理ＩＤがある場合には、抽出カラム論理ＩＤ（例えば、Ｓ＿ＤＡＴＥ）を取得して処理をステップＳ１５０８に移行する。また、該当する抽出カラム論理ＩＤがない場合には、抽出カラム物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）を取得して処理をステップＳ１５０９に移行する。
【０１３２】
そして、ステップＳ１５０８において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ステップＳ１５０７で取得した抽出カラム論理ＩＤ（例えば、Ｓ＿ＤＡＴＥ）をソート文字列（例えば、Ｓ＿ＤＡＴＥ）とする。  また、ステップＳ１５０９において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ステップＳ１５０３で取得した表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）と、ステップＳ１５０７で取得した抽出カラム物理ＩＤ（例えば、ＳＬＩＰ＿ＤＡＴＥ）と、を文字”．”で結合してソート文字列（例えば、ＯＲＤＥＲ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ）を生成する。
【０１３３】
以上のステップＳ１５０５、Ｓ１５０６、Ｓ１５０８、又はＳ１５０９の処理によってソート文字列が生成されると、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、処理をステップＳ１５１０に移行する。
【０１３４】
ステップＳ１５１０において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ステップＳ１５０１で取得したソートキーの値の正負を判別し、ソートキーの値が正の場合には、処理をステップＳ１５１１に移行し、ソート文字列に昇順指定文字列「ＡＳＣ」を付加する。また、ソートキーの値が負の場合には、処理をステップＳ１５１２に移行し、ソート文字列に降順指定文字列「ＤＥＳＣ」を付加する。
【０１３５】
ステップＳ１５１３において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、項目情報３を参照し、他に処理していないソートキーの設定があるかをチェックする。そして、他にソートキーの設定を検出すると、処理をステップＳ１５１４に移行して、検出したソートキーについて、ソートキーの絶対値の昇順に、ステップＳ１５０１〜ステップＳ１５１３の処理を繰り返す。
【０１３６】
また、ステップＳ１５１３において、当該機能ＩＤにおける項目名について全件処理が終了すると、処理をステップＳ１５１５に移行し、ステップＳ１５０１〜Ｓ１５１３で生成した全てのソート文字列を文字”，（カンマ）”によって結合して１つの文字列を生成する。
【０１３７】
そして、ステップＳ１５１６において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、ステップＳ１５１５で生成した文字列の先頭に「ＯＲＤＥＲ  ＢＹ」を付加してＯＲＤＥＲ  ＢＹ句を生成する。
【０１３８】
以上に説明したように、動的ＳＱＬ自動生成エンジン１２によってＳＱＬ文を自動生成することが可能となるが、本発明に係る動的ＳＱＬ自動生成エンジン１２は、さらに複雑なＳＱＬ文を生成することができる。
【０１３９】
以下、ＦＲＯＭ句又はＷＨＥＲＥ句に副問い合せを備えるＳＱＬ文、ＳＥＬＥＣＴ句又はＷＨＥＲＥ句に関数を備えるＳＱＬ文、ＷＨＥＲＥ句に従属条件を備えるＳＱＬ文について説明する。
【０１４０】
まず、副問い合せを備えるＦＲＯＭ句の生成処理を図１６〜図１９に基づいて説明し、副問い合せを備えるＷＨＥＲＥ句の生成処理を図２０〜図２３に基づいて説明する。
そして、関数を備えるＳＥＬＥＣＴ句の生成処理を図２４〜図２５に基づいて説明し、関数を備えるＷＨＥＲＥ句の生成処理を図２６〜図２９に基づいて説明する。
【０１４１】
さらに、従属条件を備えるＷＨＥＲＥ句の生成処理を図３０及び図３１に基づいて説明し、ＧＲＯＵＰ  ＢＹ句の生成処理を図３２〜図３４に基づいて説明する。
図１６、図１７、及び図１８は、副問い合せを備えるＦＲＯＭ句を生成する場合の項目情報３、ＤＢテーブル情報２、条件情報４の例をそれぞれ示している。
【０１４２】
図１６に示す項目情報３には、クエリＮｏ１と、副問い合せのクエリであるクエリＮｏ２とが定義され、各クエリＮｏに対してカラムＮｏ（項目）が設定されている。
また、図１７に示すテーブル情報２にも、クエリＮｏ１とクエリＮｏ２とが定義され、各クエリＮｏに対して表番号が設定されている。さらに、クエリＮｏ１の表番号２に副問い合せを組み込むために、表区分に１（サブクエリ）が設定され、さらに、組み込み対象となるクエリＮｏが内部クエリに設定されている。
【０１４３】
また、図１８の条件情報４についても、クエリＮｏ１とクエリＮｏ２とが定義され、各クエリＮｏに対して条件番号が設定されている。
ここで、図１６〜図１８には、クエリＮｏ１と２のみが定義されているが、これに限定する趣旨ではなく、必要に応じて複数のクエリＮｏを定義してもよい。
【０１４４】
図１９は、図８に示したステップＳ８０４において、副問い合せを備えるＦＲＯＭ句を生成する場合の処理を示すフローチャートである。
図８に示したステップＳ８０３からステップＳ８０４に処理が移行すると、ＦＲＯＭ句生成処理部７は、ＦＲＯＭ句生成処理を開始する（ステップＳ１９００）。
【０１４５】
ステップＳ１９０１において、ＦＲＯＭ句生成処理部７は、ＤＢテーブル情報２を参照し、当該機能ＩＤにおける内部クエリＮｏに設定があるかをチェックする。そして、内部クエリＮｏが設定されている場合には、該当する内部クエリＮｏ（例えば、図１７に示す内部クエリＮｏ２）を取得して処理をステップＳ１９０２に移行する。
【０１４６】
また、内部クエリＮｏが設定されていない場合には、処理をステップＳ１９０６に移行し、ステップＳ１９０６〜Ｓ１９０８によって抽出テーブル文字列を生成する。なお、ステップＳ１９０６〜Ｓ１９０８の処理は、図１０に示したステップＳ１００１〜Ｓ１００３と同様の処理であるので説明は省略する。
【０１４７】
ステップＳ１９０２において、ＦＲＯＭ句生成処理部７は、再帰的に図８に示したステップＳ８００〜Ｓ８０９の処理を行ない、ステップＳ１９０１で取得した内部クエリＮｏを特定クエリＮｏとするＳＱＬ文を生成する。
【０１４８】
例えば、図１６〜図１８に示した例では、特定クエリＮｏが１かつ特定表番号が２の場合にステップＳ１９０２の処理によって、クエリＮｏ２のＳＱＬ文「ＳＥＬＥＣＴ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＣＵＳＴＯＭＥＲ＿ＩＤ，ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＣＵＳＴＯＭＥＲ＿ＮＡＭＥ  ＦＲＯＭ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ  ＷＨＥＲＥ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＡＣＴＩＶＥ＿ＦＬＧ＝’０’」が生成される。
【０１４９】
そして、ステップＳ１９０３において、ＦＲＯＭ句生成処理部７は、ＤＢテーブル情報２を参照し、特定機能ＩＤにおける特定表番号の表物理ＩＤが設定されていれば取得する。さらに、特定表番号に対応する表論理ＩＤを検索する。
【０１５０】
該当する表論理ＩＤが存在する場合には、当該表論理ＩＤ（例えば、ＡＣＴＩＶＥ＿Ｃ）を取得して処理をステップＳ１９０４に移行し、当該表論理ＩＤが存在しない場合には、処理をステップＳ１９０５に移行する。
【０１５１】
ステップＳ１９０４において、ＦＲＯＭ句生成処理部７は、ステップＳ１９０２で生成したＳＱＬ文と表論理ＩＤ（例えば、ＡＣＴＩＶＥ＿Ｃ）とを”  （スペース）”によって結合して抽出テーブル文字列を生成し、処理をステップＳ１９０９に移行する。
【０１５２】
例えば、ステップＳ１９０２で示したＳＱＬ文から抽出テーブル文字列「（ＳＥＬＥＣＴ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＣＵＳＴＯＭＥＲ＿ＩＤ，ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＣＵＳＴＯＭＥＲ＿ＮＡＭＥ  ＦＲＯＭ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ  ＷＨＥＲＥ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＡＣＴＩＶＥ＿ＦＬＧ＝’０’）  ＡＣＴＩＶＥ＿Ｃ」が生成される。
【０１５３】
また、ステップＳ１９０５において、ＦＲＯＭ句生成処理部７は、ステップＳ１９０２で生成したＳＱＬ文を抽出テーブル文字列として設定し、処理をステップＳ１９０９に移行する。
【０１５４】
例えば、ステップＳ１９０２で示したＳＱＬ文から抽出テーブル文字列「（ＳＥＬＥＣＴ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＣＵＳＴＯＭＥＲ＿ＩＤ，ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＣＵＳＴＯＭＥＲ＿ＮＡＭＥ  ＦＲＯＭ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ  ＷＨＥＲＥ  ＣＵＳＴＯＭＥＲ＿ＭＳＴ．ＡＣＴＩＶＥ＿ＦＬＧ＝’０’）」が生成される。
【０１５５】
そして、ステップＳ１９１２〜Ｓ１９１４によって抽出テーブル文字列からＦＲＯＭ句を生成する。なお、ステップＳ１９１２〜Ｓ１９１４の処理は、図１０に示したステップＳ１００７〜Ｓ１００９と同様の処理なので説明は省略する。
【０１５６】
図２０、図２１、及び図２２は、副問い合せを備えるＷＨＥＲＥ句を生成する場合の項目情報３、ＤＢテーブル情報２、条件情報４の例をそれぞれ示している。
図２０に示す項目情報３には、クエリＮｏ１と、副問い合せのクエリであるクエリＮｏ２とが定義され、各クエリＮｏに対してカラムＮｏ（項目）が設定されている。
【０１５７】
同様に、図２１に示すテーブル情報２にも、クエリＮｏ１とクエリＮｏ２とが定義され、各クエリＮｏに対して表番号が設定されている。
また、図２２の条件情報４についても、クエリＮｏ１とクエリＮｏ２とが定義され、各クエリＮｏに対して条件番号が設定されている。さらに、クエリＮｏ１の条件番号１に副問い合せを組み込むために、組み込み対象となるクエリＮｏが内部クエリ（内部クエリＮｏ２）が設定されている。
【０１５８】
ここで、図２０〜図２２には、クエリＮｏ１と２のみが定義されているが、これに限定する趣旨ではなく、必要に応じて複数のクエリＮｏを定義してもよい。
図２３は、副問い合せを備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
【０１５９】
図８に示したステップＳ８０４からステップＳ８０５に処理が移行すると、ＷＨＥＲＥ句生成処理部８は、ＷＨＥＲＥ句生成処理を開始する（ステップＳ２３００）。
ステップＳ２３０１において、ＷＨＥＲＥ句生成処理部８は、ＤＢテーブル情報２及び条件情報４に基づいて左辺文字列（例えば、ＯＲＤＥＲ＿Ｂ．ＩＴＥＭ＿ＩＤ＝）を生成する。
【０１６０】
左辺文字列の生成処理が異常終了した場合には、処理をステップＳ２３１４に移行して終了する。また、ステップＳ２３０１において、左辺文字列の生成処理が正常に終了した場合には、処理をステップＳ２３０２に移行して条件情報４を参照し、内部クエリＮｏが設定されているかチェックを行なう。
【０１６１】
ステップＳ２３０２において、内部クエリＮｏが設定されている場合には、該当する内部クエリＮｏ（例えば、内部クエリＮｏ２）を取得して処理をステップＳ２３０３に移行する。また、内部クエリＮｏが設定されていない場合には、処理をステップＳ２３０５に移行し、ステップＳ２３０５〜Ｓ２３０６の処理によって条件文字列を生成する。
【０１６２】
ここで、ステップＳ２３０５〜Ｓ２３０６の処理は、図１１に示したステップＳ１１０２〜Ｓ１１０３の処理と同様なので、説明を省略する。
ステップＳ２３０３において、ＷＨＥＲＥ句生成処理部８は、再帰的に図８に示したステップＳ８００〜Ｓ８０９の処理を行ない、ステップＳ２３０２で取得した内部クエリＮｏを特定クエリＮｏとするＳＱＬ文を生成する。
【０１６３】
例えば、図２０〜図２２に示した例では、特定クエリＮｏが１かつ特定条件番号が１の場合にステップＳ２３０３の処理によって、クエリＮｏ２のＳＱＬ文「ＳＥＬＥＣＴ  ＩＴＥＭ＿ＭＳＴ．ＩＴＥＭ＿ＩＤ  ＦＲＯＭ  ＩＴＥＭ＿ＭＳＴ  ＷＨＥＲＥ  ＩＴＥＭ＿ＭＳＴ．ＩＴＥＭ＿ＮＡＭＥ＝’パラメータ１’」が生成される。
【０１６４】
そして、ステップＳ２３０４において、ＷＨＥＲＥ句生成処理部８は、ステップＳ２３０１で生成した左辺文字列と、ステップＳ２３０３で生成したＳＱＬ文と、を結合して１つの条件文字列を生成する。
【０１６５】
例えば、ステップＳ２３０１で示した左辺文字列と、ステップＳ２３０３で示したＳＱＬ文（右辺文字列）と、から条件文字列「ＯＲＤＥＲ＿Ｂ．ＩＴＥＭ＿ＩＤ＝（ＳＥＬＥＣＴ  ＩＴＥＭ＿ＭＳＴ．ＩＴＥＭ＿ＩＤ  ＦＲＯＭ  ＩＴＥＭ＿ＭＳＴ  ＷＨＥＲＥ  ＩＴＥＭ＿ＭＳＴ．ＩＴＥＭ＿ＮＡＭＥ＝’パラメータ１’）  ＡＮＤ」が生成される。
【０１６６】
そして、ステップＳ２３０７〜ステップＳ２３１１の処理によって、ＷＨＥＲＥ句を生成することとなるが、この処理については、図１１に示したステップＳ１１０４〜Ｓ１１０８と同様の処理なので説明は省略する。
【０１６７】
図２４は、関数を備えるＳＥＬＥＣＴ句を生成する場合の項目情報３の例を示している。
同図に示す項目情報３には、ＳＥＬＥＣＴ句に使用する関数が抽出形式区分に設定されている。ここで、抽出形式区分に設定された値４は、総和を求める関数ＳＵＭを示しているが、これに限定する趣旨ではなく、適宜、必要な関数を割り当てた値を使用すればよい。
【０１６８】
図２５は、関数を備えるＳＥＬＥＣＴ句を生成する処理を示すフローチャートである。
図８に示したステップＳ８０２からステップＳ８０３に処理が移行すると、ＳＥＬＥＣＴ句生成処理部６は、ＳＥＬＥＣＴ句生成処理を開始する（ステップＳ２５００）。
【０１６９】
そして、ステップＳ２５０１〜Ｓ２５０４の処理によって、カラム文字列１を生成する。なお、ステップＳ２５０１〜Ｓ２５０４の処理は、図９に示したステップＳ９０１〜Ｓ９０４と同様の処理なので説明を省略する。
【０１７０】
カラム文字列１を生成すると、ＳＥＬＥＣＴ句生成処理部６は、処理をステップＳ２５０５に移行し、項目情報３を参照し、抽出形式区分が設定されているかをチェックする。
そして、抽出形式区分が設定されている場合には、該当する抽出形式区分を取得して処理をステップＳ２５０６に移行する。また、抽出形式区分が設定されていない場合には、処理をステップＳ２５０７に移行する。
【０１７１】
なお、図２４に示した項目情報３の例では、抽出形式区分として、値が１の場合には設定なし、値が１以外の場合に設定ありとし、１以外の値をそれぞれ任意の関数に割り付けているので、抽出形式区分の値が１の場合には処理をステップＳ２５０６に移行し、値が１以外の場合には処理をステップＳ２５０７に移行する。
【０１７２】
ステップＳ２５０６において、ＳＥＬＥＣＴ句生成処理部６は、使用する関数に応じて、カラム文字列２を生成する。
例えば、図２４の例では、ステップＳ２５０１〜Ｓ２５０６の処理によって、カラム文字列２「ＳＵＭ（カラム文字列１）」を生成しているが、これに限定するわけではなく、ＴＯ＿ＣＨＡＲ（カラム名，フォーマット）など必要に応じて様々な関数の書式に応じてカラム文字列２を生成すればよい。
【０１７３】
ステップＳ２５０７において、ＳＥＬＥＣＴ句生成処理部６は、項目情報３を参照し、特定カラムＮｏに対応する抽出カラム論理ＩＤを検索する。そして、抽出カラム論理ＩＤが存在しない場合には処理をステップＳ２５０９に移行し、抽出カラム論理ＩＤが存在する場合には、抽出カラム論理ＩＤを取得してステップＳ２５０８に処理を移行する。
【０１７４】
ステップＳ２５０８において、抽出形式区分の設定がない場合、ＳＥＬＥＣＴ句生成処理部６は、ステップＳ２５０３またはステップＳ２５０４の処理によって生成したカラム文字列１と、ステップＳ２５０７の処理で取得した抽出カラム論理ＩＤと、を”  （スペース）”によって結合してカラム文字３を生成し、処理をステップＳ２５０９に移行する。
【０１７５】
また、抽出形式区分の設定がある場合には、ステップＳ２５０６で生成したカラム文字列２と、ステップＳ２５０７の処理で取得した抽出カラム論理ＩＤと、を”  （スペース）”によって結合してカラム文字３を生成し、処理をステップＳ２５０９に移行する。
【０１７６】
そして、ステップＳ２５０９〜ステップＳ２５１４の処理によって、ＳＥＬＥＣＴ句を生成することとなるが、ステップＳ２５０９〜ステップＳ２５１４の処理は、図９に示したステップＳ９０７〜Ｓ９１２の処理と同様なので説明を省略する。
【０１７７】
図２６は、条件文の右辺に関数を備えるＷＨＥＲＥ句を生成する場合の条件情報４の例を示している。
同図に示す条件情報４には、ＷＨＥＲＥ句の右辺に使用する関数が関数使用区分２に設定されている。また、関数のパラメータが関数補足２に設定されている。
【０１７８】
ここで、関数使用区分２に設定された値８は、時間データのフォーマットを変換する関数ＴＯ＿ＣＨＡＲを示しているが、これに限定する趣旨ではなく、適宜、必要な関数を割り当てた値を使用すればよい。
【０１７９】
図２７は、条件文の右辺に関数を備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
図８に示したステップＳ８０４からステップＳ８０５に処理が移行すると、ＷＨＥＲＥ句生成処理部８は、ＷＨＥＲＥ句生成処理を開始する（ステップＳ２７００）。
【０１８０】
ステップＳ２７０１において、ＷＨＥＲＥ句生成処理部８は、図１１に示したステップＳ１１０１と同様に、ＤＢテーブル情報２及び条件情報４に基づいて左辺文字列（例えば、文字列「Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ＝」）を生成する。
【０１８１】
左辺文字列の生成処理が異常終了した場合には、処理をステップＳ２７１３に移行して終了する。また、ステップＳ２７０１において、左辺文字列の生成処理が正常に終了した場合には、処理をステップＳ２７０２に移行して、図１１に示したステップＳ１１０２の処理と同様に、右辺文字列を生成する。
【０１８２】
そして、右辺文字列の生成処理が異常終了した場合には、処理をステップＳ２７１３に移行して終了し、右辺文字列の生成処理が正常に終了した場合には、処理をステップＳ２７０３に移行する。
【０１８３】
ステップＳ２７０３において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照し、関数使用区分２が設定されているかチェックする。ここで、図２６に示したように本実施例では、関数使用区分２の値が０の場合に関数使用区分２の設定なしとし、０以外の任意の値にそれぞれ必要な関数を割り当てている。
【０１８４】
したがって、ステップＳ２７０３においては、関数使用区分２の値が０以外の場合には、関数使用区分２に対応する関数文字列（例えば、ＴＯ＿ＣＨＡＲ）と関数補足２の関数補足文字列（例えば、ＹＹＹＹ／ＭＭ／ＤＤ）を取得して処理をステップＳ２７０４に移行し、値が０の場合には、処理をステップＳ２７０５に移行する。
【０１８５】
ステップＳ２７０４、Ｓ２７０５において、ＷＨＥＲＥ句生成処理部８は、ステップＳ２７０３で取得した関数文字列（例えば、ＴＯ＿ＣＨＡＲ）と、ステップＳ２７０２で取得した右辺文字列（例えば、'パラメータ値'）と、ステップＳ２７０３で取得した関数補足文字列（例えば、ＹＹＹＹ／ＭＭ／ＤＤ）とを結合して１つの条件文字列（例えば、ＴＯ＿ＣＨＡＲ（'パラメータ値'，ＹＹＹＹ／ＭＭ／ＤＤ））を生成する。
【０１８６】
以上の処理によって、条件文字列の生成が完了すると、ＷＨＥＲＥ句生成処理部８は、処理をステップＳ２７０６〜Ｓ２７１０の処理によってＷＨＥＲＥ句（例えば、文字列「ＷＨＥＲＥ  Ｏ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ＝ＴＯ＿ＣＨＡＲ（'パラメータ値'，ＹＹＹＹ／ＭＭ／ＤＤ）」）を生成する。ここで、ステップＳ２７０６〜Ｓ２７１０の処理は、図１１に示したステップＳ１１０４〜Ｓ１１０８の処理と同様なので説明は省略する。
【０１８７】
図２８は、条件文の左辺に関数を備えるＷＨＥＲＥ句を生成する場合の条件情報の例を示している。
同図に示す条件情報４には、ＷＨＥＲＥ句の左辺に使用する関数が関数使用区分１に設定されている。また、関数のパラメータが関数補足１に設定されている。
【０１８８】
ここで、関数使用区分１に設定された値８は、時間データを文字列に変換する関数ＴＯ＿ＣＨＡＲを示しているが、これに限定する趣旨ではなく、適宜、必要な関数を割り当てた値を使用すればよい。
【０１８９】
図２９は、条件文の左辺に関数を備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
図１１に示したステップＳ１１０１において、ＷＨＥＲＥ句生成処理部８が左辺文字列生成処理を開始すると（ステップＳ２９００）、処理をステップＳ２９０１に移行し、ステップＳ２９０１〜Ｓ２９０４によって条件文字列を生成する。
【０１９０】
ここで、ステップＳ２９００〜Ｓ２９０４の処理は、図１２に示したステップＳ１２００〜Ｓ１２０４と同様の処理なので、説明は省略する。
ステップＳ２９０５において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照し、関数使用区分１が設定されているかチェックする。ここで、図２８に示したように本実施例では、関数使用区分１の値が０の場合に関数使用区分１の設定なしとし、０以外の任意の値にそれぞれ必要な関数を割り当てている。
【０１９１】
したがって、ステップＳ２９０５においては、関数使用区分１の値が０以外の場合には、関数使用区分１に対応する関数文字列と関数補足１の関数補足文字列を取得して処理をステップＳ２９０６に移行し、値が０の場合には、処理をステップＳ２９０７に移行する。
【０１９２】
ステップＳ２９０６において、ＷＨＥＲＥ句生成処理部８は、ステップＳ２９０５で取得した関数文字列（例えば、ＴＯ＿ＣＨＡＲ）と、ステップＳ２９０３、又はＳ２９０４で取得した条件文字列（例えば、ＳＬＩＰ＿ＤＡＴＥ）と、ステップＳ２９０５で取得した関数補足文字列（例えば、ＹＹＹＹ／ＭＭ／ＤＤ）とを結合して１つの文字列（例えば、「ＴＯ＿ＣＨＡＲ（ＳＬＩＰ＿ＤＡＴＥ，’ＹＹＹＹ／ＭＭ／ＤＤ’）」）を生成する。
【０１９３】
さらに、ステップＳ２９０７において、ＷＨＥＲＥ句生成処理部８は、条件情報４を参照して、特定条件番号に対応する比較タイプ（例えば、＝）を取得し、関数使用区分１が設定されている場合には、ステップＳ２９０６で成した文字列に付加して左辺文字列（例えば、「ＴＯ＿ＣＨＡＲ（ＳＬＩＰ＿ＤＡＴＥ，’ＹＹＹＹ／ＭＭ／ＤＤ’）＝」）を生成する。
【０１９４】
また、関数使用区分１が設定されていない場合には、ステップＳ２９０３、又はＳ２９０４で生成した条件文字列に、比較タイプを付加して左辺文字列を生成する。
図３０は、従属条件を備えるＷＨＥＲＥ句を生成する場合の条件情報の例を示している。
【０１９５】
本実施例における従属条件とは、２つ以上の条件を組み合わせて１つの条件とする場合のそれぞれの条件に従属関係がある条件のことをいう。
例えば、「伝票日付が２００４０９１３でかつ、取引先がＡまたはＢまたはＣ」という条件で絞り込みを行なう場合に、以下のような条件文（ＷＨＥＲＥ句）が必要となる。
【０１９６】
ＷＨＥＲＥ  伝票日付＝２００４０９１３  ＡＮＤ  （取引先＝Ａ  ＯＲ  取引先＝Ｂ  ＯＲ  取引先＝Ｃ）
上記括弧（）で括られた部分のように、複数の条件を１つの条件としてＳＱＬ文を組む必要がある関係を従属関係といい、このような関係にある（）内の条件を従属条件という。
【０１９７】
図３０には、上記「伝票日付が２００４０９１３（２００４年０９月１３日）でかつ、取引先がＡまたはＢまたはＣ」という条件で絞り込みを行なうためのＷＨＥＲＥ句を生成する場合の条件情報４を示しており、条件番号２及び３にそれぞれ従属条件番号３及び４（１以外の条件番号）が設定されている。
【０１９８】
図３１は、従属条件を備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
図８に示したステップＳ８０４からステップＳ８０５に処理が移行すると、ＷＨＥＲＥ句生成処理部８は、特定条件番号を抽出データの先頭に初期化してＷＨＥＲＥ句生成処理を開始する（ステップＳ３１００）。
【０１９９】
そして、ステップＳ３１０１〜Ｓ３１０５によって、それぞれの条件番号に対して条件文字列（例えば、文字列「ＳＬＩＰ＿ＤＡＴＥ＝‘パラメータ１’  ＡＮＤ」、「ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ」等）が生成される。なお、ステップＳ３１０１〜Ｓ３１０５の処理は、図１１に示したステップＳ１１０１〜Ｓ１１０５の処理と同様なので説明は省略する。
【０２００】
条件文字列生成処理が終了すると、ＷＨＥＲＥ句生成処理部８は、処理をステップＳ３１０６に移行する。そして、条件情報４の従属条件番号を参照し、従属条件の有無を検索する。
【０２０１】
ステップＳ３１０６において、従属条件なしの場合には、処理をステップＳ３１０９に移行し、ステップＳ３１０１からＳ３１０５の条件文字列生成処理で生成した全ての条件文字列を結合して１つの文字列を生成する。
【０２０２】
また、ステップＳ３１０６において、従属条件ありの場合（例えば、図３０に示した条件情報４には、条件番号２及び３にそれぞれ従属条件番号３及び４が設定されているので、従属条件があると判断する）には、処理をステップＳ３１０７に移行する。
【０２０３】
また、ステップＳ１１０６において、従属条件ありの場合には、検出した従属条件番号（以下、「特定従属条件番号」という）と特定従属条件番号が設定されている条件番号（以下、ステップＳ３１０７及びＳ３１０８において、「特定条件番号」という）を取得して処理をステップＳ３１０７に移行し、従属条件文字列の生成処理を行なう。
【０２０４】
ステップＳ１１０７において、ＷＨＥＲＥ句生成処理部８は、特定条件番号の条件文字列（例えば、特定条件番号２の条件文字列「ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ」）と、特定従属条件番号と一致する条件番号の条件文字列（例えば、特定条件番号３と一致する条件番号３の文字列「ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ３’  ＯＲ」）とを結合して条件文字列（例えば、「ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ３’  ＯＲ」）を生成する。
【０２０５】
同様にして、１以外の従属条件番号が設定されている全ての条件番号に対して順次条件文字列の結合処理を行なう。例えば、特定条件番号３には、特定従属条件番号４が設定されているので、特定条件番号３の結合された条件文字列「ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ３’  ＯＲ」と、特定条件番号４と一致する条件番号４の文字列「ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ４’」）とを結合する。
【０２０６】
そして、従属条件が設定されている全ての条件文字列に対して結合処理が完了すると、結合処理によって生成した文字列の先頭と終りにそれぞれ“（”、“）”を付加して従属条件が生成される。
【０２０７】
以上のステップＳ３１０７の処理によって、図３０に示した条件情報４の例では、従属条件「（ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ３’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ４’）」が生成される。
【０２０８】
上述の従属条件生成処理を、条件情報４の特定機能ＩＤにおける１以外の値が設定されている従属条件番号の全てについて行なうと、ＷＨＥＲＥ句生成処理部８は、処理をステップＳ３１０８に移行する。
【０２０９】
ステップＳ１１０８において、ＷＨＥＲＥ句生成処理部８は、ステップＳ３１０７で生成した従属条件文字列と、ステップＳ３１０７で従属条件文字列として使用した以外の条件文字列（例えば、「ＳＬＩＰ＿ＤＡＴＥ＝‘パラメータ１’  ＡＮＤ」）と、を全て結合させて一つの文字列を生成する。
【０２１０】
例えば、図３０に示した条件情報４における特定機能ＩＤ：ＩＤ−００１についてステップＳ３１０１〜Ｓ３１０９の処理を行なうことによって、文字列「ＳＬＩＰ＿ＤＡＴＥ＝‘パラメータ１’  ＡＮＤ  （ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ３’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ４’）」が生成される。
【０２１１】
ステップＳ３１１０において、ＷＨＥＲＥ句生成処理部８は、ステップＳ３１０８又はＳ３１０９で生成した文字列の先頭に「ＷＨＥＲＥ」を付加してＷＨＥＲＥ句を生成し処理を終了する（ステップＳ３１１１）。
【０２１２】
例えば、ステップＳ３１０８で示した文字列からＷＨＥＲＥ句「ＷＨＥＲＥ  ＳＬＩＰ＿ＤＡＴＥ＝‘パラメータ１’  ＡＮＤ  （ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ２’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ３’  ＯＲ  ＣＵＳＴＯＭＥＲ＿ＩＤ＝‘パラメータ４’）」が生成される。
【０２１３】
なお、上述のパラメータ１〜パラメータ４は、図３に説明したように、例えば、受注伝票印刷アプリケーションから動的ＳＱＬ自動生成エンジン１２に渡されるパラメータであることは当然である。
図３２〜図３４は、それぞれＧＲＯＵＰ  ＢＹ句を生成する場合のＤＢテーブル情報３２、項目情報３３、及び条件情報３４の例を示す図であり、下記に示す取引先ＩＤごとの金額を求めるＳＱＬ文を生成する場合の例を示している。
【０２１４】
ＳＥＬＥＣＴ  取引先ＩＤ，  ＳＵＭ（金額）  ＦＲＯＭ  受注ヘッダ  ＷＨＥＲＥ  伝票日付＝２００３０９１３  ＧＲＯＵＰ  ＢＹ  取引先ＩＤ  ＯＲＤＥＲ  ＢＹ  取引先ＩＤ  
図３３に示す項目情報３３には、示すカラムＮｏ．１のグループキーに１が設定されている。
【０２１５】
以下、図３２〜図３４に示したＤＢテーブル情報３２、項目情報３３、及び条件情報３４を用いて上述のＳＱＬ文を生成する処理について図８に基づいて説明する。
ステップＳ８０１において、動的ＳＱＬ自動生成エンジン１２は、特定機能ＩＤをキーとして、データベースに格納されているＤＢテーブル情報３２、項目情報３３、及び条件情報３４から特定機能ＩＤに対応した（関連付けられた）データを抽出する。
【０２１６】
ステップＳ８０１の処理で特定機能ＩＤに対応するデータを抽出すると、さらに、特定クエリＮｏを、Ｓ８０１にて抽出したデータを番号順にソートし、抽出データの先頭に初期化し、処理をステップＳ８０３に移行する。
【０２１７】
ステップＳ８０３において、ＳＥＬＥＣＴ句生成処理部６は、ＤＢテーブル情報３２及び項目情報３３を参照して特定機能ＩＤに応じたＤＢテーブルの項目を取得し、図２５に示した関数を備えるＳＥＬＥＣＴ句生成処理によってＳＥＬＥＣＴ句を生成する（例えば、「ＳＥＬＥＣＴ  ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ，  ＳＵＭ（ＴＯＴＡＬ＿ＰＲＩＣＥ）」）。
【０２１８】
ステップＳ８０４において、ＦＲＯＭ句生成処理部７は、ＤＢテーブル情報３２を参照して特定機能ＩＤに応じたＤＢテーブル名を取得し、図１０に示したＦＲＯＭ句生成処理によってＦＲＯＭ句を生成する（例えば、「ＦＲＯＭ  ＯＲＤＥＲ＿Ｈ」）。
【０２１９】
ステップＳ８０５において、ＷＨＥＲＥ句生成処理部８は、ＤＢテーブル情報３２及び条件情報３４を参照して機能ＩＤに該当する条件を取得し、図１１に示したＷＨＥＲＥ句生成処理によってＷＨＥＲＥ句を生成する（例えば、「ＷＨＥＲＥ  ＯＲＤＥＲ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ＝‘パラメータ１‘」）。
【０２２０】
ステップＳ８０６において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３３を参照し、図１４に示したＧＲＯＵＰ  ＢＹ句生成処理によってＧＲＯＵＰ  ＢＹ句を生成する。
【０２２１】
ここで、図１４に示したＧＲＯＵＰ  ＢＹ句生成処理において、ＧＲＯＵＰ  ＢＹ句生成処理部２０が、ＧＲＯＵＰ  ＢＹ句生成処理を開始すると（ステップＳ１４００）、ステップＳ１４０１において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３３を参照し、特定機能ＩＤにおけるグループキーを検索する。そして、グループキーを検出すると、処理をステップＳ１４０２に移行し、ステップＳ１４０１で検出したグループキー（例えば、カラムＮｏ．１のグループキー１）に対応する取得元表番号（例えば、カラムＮｏ１の取得元表番号１）を取得する。
【０２２２】
さらに、ステップＳ１４０２において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、ＤＢテーブル情報３２の特定機能ＩＤにおける表番号を参照し、取得した取得元表番号（例えば、取得元表番号１）と一致する表番号を検索する。
【０２２３】
検索の結果、取得元表番号と一致する表番号を検出すると、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、処理をステップＳ１４０３に移行し、ＤＢテーブル情報３２を参照して、検出した表番号に対応する表論理ＩＤがあるかチェックする。
【０２２４】
ステップＳ１４０３において、該当する表論理ＩＤがある場合には、当該論理ＩＤ（本実施例では表論理の設定なし）を取得して処理をステップＳ１４０４に移行し、該当する表論理ＩＤがない場合には、ステップＳ１４０２で検出した表番号に対応する表物理ＩＤ（例えば、表番号１の表物理ＩＤ：ＯＲＤＥＲ＿Ｈ）を取得して処理をステップＳ１４０５に移行する。
【０２２５】
ステップＳ１４０５において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、項目情報３を参照して抽出カラム物理ＩＤ（例えば、カラムＮｏ１の抽出カラム物理ＩＤ：ＣＵＳＴＯＭＥＲ＿ＩＤ）を取得し、ステップＳ１４０３で取得した表物理ＩＤ（例えば、ＯＲＤＥＲ＿Ｈ）と、文字”．”で結合してグループ文字列（ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ）を生成する。
【０２２６】
以上のステップＳ１４０４、又はＳ１４０５の処理によってグループ文字列が生成されると、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、処理をステップＳ１４０６に移行して項目情報３を参照し、他にグループキーの設定があるかをチェックする。そして、他にグループキーの設定を検出すると、処理をステップＳ１４０７に移行して、検出したカラムＮｏについて、ステップＳ１４０１〜ステップＳ１４０７の処理を繰り返す。
【０２２７】
また、ステップＳ１４０６において、特定機能ＩＤにおける全てのカラムＮｏについて処理が終了すると、処理をステップＳ１４０８に移行し、ステップＳ１４０１〜Ｓ１４０６で生成した全てのグループ文字列を、グループキーに設定された値の昇順に文字”，（カンマ）”によって結合して１つの文字列を生成する。
【０２２８】
そして、ステップＳ１４０９において、ＧＲＯＵＰ  ＢＹ句生成処理部２０は、ステップＳ１４０８で生成した文字列の先頭に「ＧＲＯＵＰ  ＢＹ」を付加してＧＲＯＵＰ  ＢＹ句（例えば、「ＧＲＯＵＰ  ＢＹ  ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ」）を生成し処理を終了する（ステップＳ１４１０）。
【０２２９】
ステップＳ８０７において、ＯＲＤＥＲ  ＢＹ句生成処理部２１は、項目情報３を参照し、図１５に示したＯＲＤＥＲ  ＢＹ句生成処理によってＯＲＤＥＲ  ＢＹ句を生成する（例えば、「ＯＲＤＥＲ  ＢＹ  ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ」）。
【０２３０】
ステップＳ８０８において、ＳＱＬ文生成処理部９は、ステップＳ８０３からＳ８０７の処理によって生成された句を結合してＳＱＬ文を生成する（例えば、「ＳＥＬＥＣＴ  ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ，  ＳＵＭ（ＴＯＴＡＬ＿ＰＲＩＣＥ）  ＦＲＯＭ  ＯＲＤＥＲ＿Ｈ  ＷＨＥＲＥ  ＯＲＤＥＲ＿Ｈ．ＳＬＩＰ＿ＤＡＴＥ＝‘パラメータ１‘  ＧＲＯＵＰ  ＢＹ  ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ  ＯＲＤＥＲ  ＢＹ  ＯＲＤＥＲ＿Ｈ．ＣＵＳＴＯＭＥＲ＿ＩＤ」）。
【０２３１】
以上に説明したように、図４〜図７に示した機能情報１、ＤＢテーブル情報２、項目情報３、及び条件情報４を例えば、設計仕様書等に基づいて生成することによって、所望のＳＱＬ文を生成することが可能となる。
【０２３２】
また、機能情報１、ＤＢテーブル情報２、項目情報３、及び条件情報４から自動的にＳＱＬ文を生成することが可能なので、プログラミングによるＳＱＬ文法エラーをなくすことができ、品質の安定したＳＱＬ文を生成することが可能となる。
【０２３３】
また、本発明に係るＳＱＬ自動生成プログラムによる動的ＳＱＬ自動生成エンジンは、ＳＱＬ文のみを生成するので、呼び出し元のアプリケーションでＳＱＬ文の実行及び実行結果を自由に行なうことができる。
【０２３４】
また、必須条件フラグを設けて、呼び出し元のアプリケーション等から指定された条件（パラメータ）に基づいてＳＱＬ文を生成し、指定された条件に必須条件が含まれない場合には異常終了とすることによって、あらかじめ条件毎に複数のＳＱＬ文を用意する必要がなくなるので、条件に応じて柔軟にＳＱＬ文を生成することが可能となる。
【図面の簡単な説明】
【０２３５】
【図１】本発明の原理を示す図である。
【図２】本発明に係る実施例の概要を示す図である。
【図３】本実施例で行なわれる処理の例の概要を示す図である。
【図４】本実施例に係る機能情報の例を説明する図である。
【図５】本実施例に係るＤＢテーブル情報の例を説明する図である。
【図６】本実施例に係る項目情報の例を説明する図である。
【図７】本実施例に係る条件情報の例を説明する図である。
【図８】本実施例に係る動的ＳＱＬ自動生成エンジンの処理の概要を示すフローチャートである。
【図９】図８に示したステップＳ８０３におけるＳＥＬＥＣＴ句生成処理を示すフローチャートである。
【図１０】図８に示したステップＳ８０４におけるＦＲＯＭ句生成処理を示すフローチャートである。
【図１１】図８に示したステップＳ８０５におけるＷＨＥＲＥ句生成処理を示すフローチャートである。
【図１２】図１１におけるステップＳ１１０１の左辺文字列生成処理のフローチャートである。
【図１３】図１１におけるステップＳ１１０２の右辺文字列生成処理のフローチャートである。
【図１４】図８に示したステップＳ８０６におけるＧＲＯＵＰ  ＢＹ句生成処理を示すフローチャートである。
【図１５】図８に示したステップＳ８０７におけるＯＲＤＥＲ  ＢＹ句生成処理を示すフローチャートである。
【図１６】副問い合せを備えるＦＲＯＭ句を生成する場合の項目情報の例を示す図である。
【図１７】副問い合せを備えるＦＲＯＭ句を生成する場合のＤＢテーブル情報の例を示す図である。
【図１８】副問い合せを備えるＦＲＯＭ句を生成する場合の条件情報の例を示す図である。
【図１９】副問い合せを備えるＦＲＯＭ句を生成する処理を示すフローチャートである。
【図２０】副問い合せを備えるＷＨＥＲＥ句を生成する場合の項目情報の例を示す図である。
【図２１】副問い合せを備えるＷＨＥＲＥ句を生成する場合のＤＢテーブル情報の例を示す図である。
【図２２】副問い合せを備えるＷＨＥＲＥ句を生成する場合の条件情報の例を示す図である。
【図２３】副問い合せを備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
【図２４】関数を備えるＳＥＬＥＣＴ句を生成する場合の項目情報の例を示す図である。
【図２５】関数を備えるＳＥＬＥＣＴ句を生成する処理を示すフローチャートである。
【図２６】条件文の右辺に関数を備えるＷＨＥＲＥ句を生成する場合の条件情報の例を示す図である。
【図２７】条件文の右辺に関数を備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
【図２８】条件文の左辺に関数を備えるＷＨＥＲＥ句を生成する場合の条件情報の例を示す図である。
【図２９】条件文の左辺に関数を備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
【図３０】従属条件を備えるＷＨＥＲＥ句を生成する場合の条件情報の例を示す図である。
【図３１】従属条件を備えるＷＨＥＲＥ句を生成する処理を示すフローチャートである。
【図３２】ＧＲＯＵＰ  ＢＹ句を生成する場合のＤＢテーブル情報の例を示す図である。
【図３３】ＧＲＯＵＰ  ＢＹ句を生成する場合の項目情報の例を示す図である。
【図３４】ＧＲＯＵＰ  ＢＹ句を生成する場合の条件情報の例を示す図である。
【符号の説明】
【０２３６】
１      機能情報
２      ＤＢテーブル情報
３      項目情報
４      条件情報
５      機能項目取得部
６      ＳＥＬＥＣＴ句生成処理部
７      ＦＲＯＭ句生成処理部
８      ＷＨＥＲＥ句生成処理部
９      ＳＱＬ文生成処理部
２０      ＧＲＯＵＰ  ＢＹ句生成処理部
２１      ＯＲＤＥＲ  ＢＹ句生成処理部
【図１】
2006235770.tif 000003
【図２】
2006235770.tif 000004
【図８】
2006235770.tif 000005
【図９】
2006235770.tif 000006
【図１０】
2006235770.tif 000007
【図１１】
2006235770.tif 000008
【図１２】
2006235770.tif 000009
【図１３】
2006235770.tif 000010
【図１４】
2006235770.tif 000011
【図１５】
2006235770.tif 000012
【図１９】
2006235770.tif 000013
【図２３】
2006235770.tif 000014
【図２５】
2006235770.tif 000015
【図２７】
2006235770.tif 000016
【図２９】
2006235770.tif 000017
【図３１】
2006235770.tif 000018
【図３】
2006235770.tif 000019
【図４】
2006235770.tif 000020
【図５】
2006235770.tif 000021
【図６】
2006235770.tif 000022
【図７】
2006235770.tif 000023
【図１６】
2006235770.tif 000024
【図１７】
2006235770.tif 000025
【図１８】
2006235770.tif 000026
【図２０】
2006235770.tif 000027
【図２１】
2006235770.tif 000028
【図２２】
2006235770.tif 000029
【図２４】
2006235770.tif 000030
【図２６】
2006235770.tif 000031
【図２８】
2006235770.tif 000032
【図３０】
2006235770.tif 000033
【図３２】
2006235770.tif 000034
【図３３】
2006235770.tif 000035
【図３４】
2006235770.tif 000036