(57)【要約】  【課題】  データベースを操作するアプリケーションプログラムには、データベースを操作する別の言語による文字列の記述が埋め込まれるが、これによりアプリケーションプログラムの信頼性が低くなっている。  【解決手段】データベースを操作する別の言語による文字列の記述に代えて、データベース操作命令を構成するための断片列情報を断片列情報組合部４０１で組み合わせ、その組み合わされた断片列情報に基づいて、データベース操作命令をデータベース操作命令生成部４０２にて生成する。これにより、アプリケーションプログラムのデータ構造としてデータベース操作言語が記述でき、データベース操作言語が正しく無いことを、アプリケーションプログラムをコンパイルする段階などで検出することが可能となる。【選択図】  図４
2006004146.tif 000002
【特許請求の範囲】
【請求項１】
データベースと、前記データベースを操作するために、前記データベースの操作言語以外の言語を用いて構築されたデータベース操作装置と、からなるデータベース操作システムであって、
前記データベース操作装置は、
前記データベースの操作言語でのデータベース操作命令を構成するための断片列情報を一以上組み合わせる断片列情報組合部と、
前記断片列情報組合部で組み合わされた断片列情報から、データベース操作命令を生成するデータベース操作命令生成部と、
を有し、
前記データベースは、
前記データベース操作命令生成部から生成されたデータベース操作命令を取得する操作命令取得部と、
前記操作命令取得部で取得したデータベース操作命令に基づいて処理を実行する実行部と、
を有するデータベース操作システム。
【請求項２】
前記断片列情報は、前記データベースの操作言語の文法に対応して階層的に組み合わされる請求項１に記載のデータベース操作システム。
【請求項３】
断片列情報組合部での断片列情報の組み合わせは、前記データベースの操作言語でのデータベース操作命令の文字列の記述に代えて行なわれる請求項１または２に記載のデータベース操作システム。
【請求項４】
前記データベース操作装置は、
前記データベースの操作言語の種類を指定する情報である指定情報を入力する操作言語指定入力部を有し、
前記データベース操作命令生成部は、前記操作言語指定入力部に入力された指定情報に基づいて、データベース操作命令を生成する請求項１から３のいずれか一に記載のデータベース操作システム。
【請求項５】
前記断片列情報には、データベース操作命令の条件を指定する断片列情報である条件断片列情報が含まれ、少なくとも一の条件断片列情報は、文字列によって表現された条件を指定可能である請求項１から３のいずれか一に記載のデータベース操作システム。
【請求項６】
データベースと、前記データベースを操作するために前記データベースの操作言語以外の言語を用いて構築されたデータベース操作装置と、からなるデータベース操作システムの動作方法であって、
前記データベース操作装置には、
前記データベースの操作言語でのデータベース操作命令を構成するための断片列情報を一以上組み合わせる断片列情報組合ステップと、
前記断片列情報組合ステップで組み合わされた断片列情報から、データベース操作命令を生成するデータベース操作命令生成ステップと、
を実行させ、
前記データベースには、
前記データベース操作命令生成ステップで生成されたデータベース操作命令を取得する操作命令取得ステップと、
前記操作命令取得ステップで取得した操作命令に基づいて処理を実行する実行ステップと、
を実行させるデータベース操作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース操作システムに関し、特に、データベースの操作命令をデータ構造により表わして文字列に変換して実行するデータベース操作システムに関する。
【背景技術】
【０００２】
データベース操作言語として、ＳＱＬ（「Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ」の略と言われている）が主に使用されており、ＪＩＳ規格などとして制定されている。しかし、ＳＱＬはデータベース操作言語としては適している言語かもしれないが、一般のアプリケーションプログラムを記述するためには適していない。そのため、データベースを操作するアプリケーションプログラムは、その中にＳＱＬの文を文字列として埋め込んだり、文字列としてのＳＱＬ文を生成して実行したりするようになっている（例えば、非特許文献１参照。）。
【０００３】
図１は、データベースを操作するアプリケーションプログラムの動作を例示する。アプリケーションプログラム１０１はＯＳ（オペレーティングシステム）インターフェース１０２やＳＱＬドライバ１０３の上で動作する。ＳＱＬドライバは、データベース管理サーバ１０４との通信を行なうためのドライバであり、アプリケーションプログラムがＳＱＬドライバに対して文字列で表わされたＳＱＬ文を渡すと、そのＳＱＬ文の情報がデータベース管理システムに送信され、データベース管理サーバ１０４からの結果を示す情報がＳＱＬドライバ１０３に返信され、アプリケーションプログラムが、ＳＱＬ文の実行結果を得ることができるようになっている。なお、「ＳＱＬドライバ」という用語は、ＯＤＢＣドライバやＪＤＢＣドライバを含む概念として一般には使用しているが、ここではデータベースを操作するためのデータ構造やライブラリを含むものとする。
【０００４】
図２は、アプリケーションプログラムの記述のうち、データベースを操作するための部分を抜き出したものを例示する。１行目において、アプリケーションプログラムとデータベース管理サーバとの接続を表わすデータを得ている。２行目と３行目において、文字列として記述されたＳＱＬ文をＳＱＬドライバに渡すことを行なっている。特に３行目において、ＳＱＬ文を文字列として記述している。４行目において、ＳＱＬ文をＳＱＬドライバからデータベース管理サーバへ渡して実行し、その結果を得ている。５行目から８行目では、ＳＱＬ文の実行結果をプリントアウトしている。
【非特許文献１】伊賀敏樹、やさしく学ぶ基礎からのＪＤＢＣ、株式会社毎日コミュニケーションズ発行、２００４年４月
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、アプリケーションプログラムにおいては、ＳＱＬ文は文字列として表現されているので、アプリケーションプログラムのコンパイラなどは、文字列の内容まで検査をしないので、コンパイルなどが正常に終了したとしても、そのことは文字列として表現されたＳＱＬ文が正しいことを意味するものではない。このため、実際にアプリケーションプログラムを動作させてＳＱＬ文をデータベース管理サーバに送信してみないと、アプリケーションプログラムに埋め込まれたり生成されたりするＳＱＬ文が正しいかどうか判定することができない。このため、データベースを操作するアプリケーションプログラムの信頼性を上げるには困難が伴なう。
【０００６】
また、従来のデータベースを操作するアプリケーションプログラムの開発においては、上述したようにＳＱＬ文を文字列として埋め込んだり生成したりする必要があるので、プログラマは、アプリケーションプログラムを記述するＣ言語やＪａｖａ（登録商標）言語などとは異なる体系の言語であるＳＱＬなどを学ぶ必要があり、この点も信頼性を上げる妨げとなっている。
【０００７】
また、多くのデータベース管理サーバはＳＱＬで操作できるといっても、データベース管理サーバごとに微妙な違いがあり、データベース管理サーバを別のものに取り替えると、それに応じてアプリケーションプログラムに埋め込まれたり生成されたりするＳＱＬ文をチェックして見直して対応する必要があったが、チェックは人手により行なわざるをえず、どうしても漏れが生じる。このため、最終的には、アプリケーションプログラムを動作させて全てのＳＱＬ文を処理しないと、正しく対応できたかどうかを検証することができず、アプリケーションプログラムの信頼性を高くすることは非常に困難である。
【０００８】
そこで、本発明では、アプリケーションプログラムの信頼性を上げることができるデータベース操作システムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明においては、データベースとデータベース操作装置からなるデータベース操作システムであって、データベース操作装置は、データベース操作命令を構成するための断片列情報を組み合わせ、組み合わされた断片列情報からデータベース操作命令を生成し、データベースは、生成された操作命令を取得し、取得されたデータベース操作命令に基づいて処理を実行するデータベース操作システムを提供する。これにより、データベース操作装置を実現するアプリケーションプログラムを記述する際には、その記述に用いられるプログラミング言語とは異なるＳＱＬなどのデータベース操作言語について深い知識を必要とせず、目的が達成され、課題が解決される。
【００１０】
また、断片列情報は、データベース操作命令の言語の文法に対応して階層的に組み合わされるようになっていてもよい。これにより、Ｃ言語やＪａｖａ（登録商標）言語などの型付けされた言語においては、コンパイルにより断片列情報の組み合わせがデータ型に適合していることが得られれば、生成されるデータベース操作言語の記述が正しいことを判定することができ、目的が達成され、課題が解決される。
【００１１】
なお、断片列情報の組み合わせは、データベース操作命令の文字列の記述に代えて行なわれるものであってもよい。これにより、ＳＱＬ文などを文字列で記述する必要がなくなり、目的が達成され、課題が解決される。
【００１２】
また、データベース操作命令の言語の種類を入力し、入力された言語の種類に応じて、断片列情報からデータベース操作命令を生成するようになっていてもよい。これにより、データベース管理サーバの交換に対応することができ、目的が達成され、課題が解決される。
【００１３】
また、断片列情報には、文字列によって表現された条件を指定可能なものがあってもよい。これにより、複雑な検索条件などを記述することができる。
【発明の効果】
【００１４】
本発明に係るデータベース操作システムによれば、アプリケーションプログラムの記述で使用される言語とは一般的には異なるデータベースの操作言語について深い理解がなくても、データベースにアクセスするアプリケーションプログラムを作成することが可能となり、また、アプリケーションプログラムの信頼性を向上させることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明を実施するための最良の形態について、実施形態として図を用いて説明する。なお、本発明はこれら実施形態になんら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施し得る。
【００１６】
なお、以下に説明する実施形態と請求項との対応関係は次の通りである。実施形態１は主に請求項１と６とについて説明する。実施形態２は主に請求項２について説明する。実施形態３は主に請求項３について説明する。実施形態４は主に請求項４について説明する。実施形態５は主に請求項５について説明する。
【００１７】
（実施形態１）
本発明の実施形態１として、データベース操作命令を構成するための断片列情報を組み合わせてデータベース操作命令を生成して処理を実行するデータベース操作システムについて説明する。
【００１８】
（実施形態１：構成）
図３は、本実施形態に係るデータベース操作システムの機能ブロック図を例示する。データベース操作システム３００は、データベース操作装置３０１と、データベース３０２と、からなる。なお、データベース操作装置３０１とデータベース３０２とは、プログラムにより実現されるのが通常である。また、そのようなプログラムは、一つの計算機内で動く一つのあるいは異なるプロセスあるいはスレッドによって動作してもよいし、異なる計算機内で動くプロセスあるいはスレッドとして動作してもよい。なお、通常「データベース」という言葉は、データの集まりという静的なものを意味することが多いが、本明細書では、データベースを管理するプロセスなど、動的なものを意味する。
【００１９】
図４は、データベース操作装置の機能ブロック図を例示する。データベース操作装置４００は、断片列情報組合部４０１と、データベース操作命令生成部４０２と、を有する。
【００２０】
「断片列情報組合部」４０１は、断片列情報を一以上組み合わせる。「断片列情報」とは、データベース３０２の操作言語でのデータベース操作命令を構成するための情報である。すなわち、断片列情報とは、データベース操作命令を適宜区切り、断片化したものを表わす。なお、断片列情報の組み合わせ方には様々なものがある。例えば、一列に並ぶように組み合わせたり、あるいは、木構造や一般のグラフ構造として組み合わせたりする。
【００２１】
図５（Ｂ）は、図５（Ａ）に示されたＳＱＬ文を一以上の断片列情報の組み合わせにより表現した例を示す。この例では、ＳＱＬ文を構成する単語（あるいは、構文解析における「トークン」）を一つの断片列情報に対応させ、各断片列情報を一列に並べて組み合わせている。また、ｓｅｌｅｃｔ、ｆｒｏｍ、ｗｈｅｒｅ、ａｎｄというＳＱＬ文の予約語（「キーワード」ともいう）と、その他の単語とを区別し、その他の単語をｄｏｕｂｌｅ  ｑｕｏｔｅ（"）で囲んで示している。なお、ｃｏｍｍａ（，）は断片列情報には含まれていないことに注意されたい。
【００２２】
図６は、図５（Ｂ）に示された各断片列情報を表わすデータ構造の記述を例示する。この例では、各断片列情報は、Ｃ言語やＣ＋＋言語などの列挙型と構造体とにより表わされるようになっている。列挙型ｓｑｌｗｏｒｄは、ＳＱＬ文の予約語の種類を表わすために用いられる。例えば、ｓｑｌ＿ｓｅｌｅｃｔは、ｓｅｌｅｃｔという予約語を表わすために用いられる。また、ｓｑｌ＿ｇｒｅａｔｅｒ＿ｔｈａｎは、不等号>を表わすために用いられ、ｓｑｌ＿ｌｅｓｓ＿ｔｈａｎは、<を表わすために用いられる。ｓｑｌｃｅｌｌという構造体は３つの構造体メンバｎｅｘｔ、ｋｅｙｗｏｒｄ、ｗｏｒｄからなる。ｎｅｘｔは、次の断片列情報を表わす構造体のメモリアドレスを表わす。ｋｅｙｗｏｒｄは、断片列情報が予約語を表わすときに、どの予約語を表わすかを示す。ｗｏｒｄには、断片列情報がその他の単語である場合、その単語を表わす文字列データのメモリアドレスを表わす。
【００２３】
図７は、図５（Ｂ）に例示された断片列情報の組み合わせを作りだすプログラム例を示す。１行目と２行目は、変数の宣言であり、ｓｑｌｒｏｏｔは、組み合わされた断片列情報の最初の断片列情報を表わす構造体のメモリアドレスを保持するために使用される変数であり、ｐは作業用として使用される変数である。４行目から７行目までは、最初の断片列情報を表わす構造体を設定している。ｍａｌｌｏｃ（）という関数は指定されたサイズのメモリを確保して、そのメモリアドレスを返す関数である。また、ｓｉｚｅｏｆ  （ｓｔｒｕｃｔ  ｓｑｌｃｅｌｌ）は、ｓｑｌｃｅｌｌという構造体を格納するのに必要なメモリサイズを表わす。また、ｓｑｌｗｏｒｄにメモリアドレスが保持されている場合、ｓｑｌｗｏｒｄ−>ｋｅｙｗｏｒｄにより、ｓｑｌｗｏｒｄに保持されているメモリアドレスを開始アドレスとした領域を、ｓｑｌｃｅｌｌという構造体の内容が展開された領域とみなしたときの構造体メンバｋｅｙｗｏｒｄの位置を表わす。
【００２４】
図８は、図７に例示されたプログラムにより断片列情報が組合されていく過程を示す。図８（Ａ）は、図７の７行目までに作られる断片列情報を示す。すなわち、ｓｑｌｒｏｏｔとｐという変数に、ｓｅｌｅｃｔという予約語を表わす構造体のメモリアドレスが保持されている。図８（Ｂ）は、図７の９行目における状態を示す。すなわち、ｐ−>ｎｅｘｔに２番目の断片列情報を表わす構造体のメモリアドレスが代入される。図８（Ｃ）は、図７の１１行目における状態を示す。すなわち、ｐに保持されたメモリアドレスを開始アドレスとした領域の構造体メンバｗｏｒｄに相当する部分に、Ｎａｍｅという文字列のメモリアドレスが格納されている。同様に、図８（Ｄ）は、図７の１３行目における状態を表わし、図８（Ｅ）は、図７の１５行目における状態を表わしている。
【００２５】
「データベース操作命令生成部」４０２は、断片列情報組合部４０１で組み合わされた断片列情報から、データベース操作命令を生成する。例えば、断片列情報の組み合わせをたどりながら、データベース操作命令を表わす文字列を生成する。
【００２６】
図９は、図５（Ｂ）に例示された断片列情報から、データベース操作命令であるＳＱＬ文を生成する処理の流れ図を例示する。ステップＳ９０１において、先頭の断片列情報を得る。例えば、図７に例示されたプログラムにより断片列情報が組み合わされたのであれば、ｓｑｌｒｏｏｔに保持されているメモリアドレスを得る。ステップＳ９０２において、断片列情報に応じたデータベース操作命令の部分を生成する。例えば、ｓｑｌｒｏｏｔに保持されているメモリアドレスを開始アドレスした領域をｓｑｌｃｅｌｌという構造体の内容が展開された領域とみなした場合、構造体メンバｋｅｙｗｏｒｄとｗｏｒｄの値を調べ、ｗｏｒｄの値が０なら、ｋｅｙｗｏｒｄに格納された値を調べてそれに応じたキーワードをデータベース操作命令の部分として生成し、ｗｏｒｄの値が０でなければ、その値をメモリアドレスと解釈し、そのメモリアドレスに格納されている文字列をデータベース操作命令の部分として生成する。なお、ここでいう「生成」には文字列として生成し、その後に空白を示す文字を追加することを含んでいてもよい。
【００２７】
ステップＳ９０３において、区切り文字が必要かどうかを判断する。例えば、図５（Ａ）に例示されたＳＱＬ文においては、ＮａｍｅとＡｄｄｒｅｓｓの値にコンマが記されているが、このコンマのことを区切り文字という。もし区切り文字が必要であれば、ステップＳ９０４へ処理を移行させ、そうでなければ、ステップＳ９０５へ移行させる。このような処理を行なうことにより、コンマなどの区切り文字を記述するべきかどうかを気にすることなく、断片列情報を組み合わせることができ、データベース操作言語の細かな文法事項に詳しくなくてもデータベース操作命令を生成することができる。
【００２８】
ステップＳ９０４においては、区切り文字を生成する。そして、ステップＳ９０５へ処理を移行させる。
【００２９】
ステップＳ９０５において、次の断片列情報があるかどうか判断する。もしあれば、ステップＳ９０６へ処理を移行させ、次の断片列情報を得て、ステップＳ９０２へ戻る。もし、次の断片列情報が無ければ、処理を終了する。
【００３０】
図１０は、データベースの機能ブロック図を例示する。データベース１０００は、操作命令取得部１００１と、実行部１００２と、を有する。
【００３１】
「操作命令取得部」１００１は、データベース操作命令生成部４０２から生成されたデータベース操作命令を取得する。例えば、データベース操作命令生成部で生成された文字列で表現されたＳＱＬ文を取得する関数などである。このような関数は、例えば、図１に例示されたＳＱＬドライバ１０３に含まれている。
【００３２】
「実行部」１００２は、操作命令取得部１００１で取得したデータベース操作命令に基づいて処理を実行する。「基づいて」とは、データベース操作命令の取得が契機となり、そのデータベース操作命令に従って、という意味である。例えば、ＳＱＬドライバ１０３が文字列をＳＱＬ文として取得することを契機として、その文字列を構文解析し、構文エラーなどがなければ、そのＳＱＬ文を表わす情報をデータベース管理サーバ１０４へ送信し、データベース管理サーバ１０４にＳＱＬ文に従った処理を実行させる。
【００３３】
あるいは、データベース管理サーバ１０４のＳＱＬ文を取得するインターフェース部分が操作命令取得部４０２となり、データベース管理サーバ１０４のＳＱＬ文を実行する部分が実行部１００２と解釈することも可能である。この場合、データベース操作命令生成部は、アプリケーションプログラムの部分のうち、断片列情報からＳＱＬドライバ１０３に渡すＳＱＬ文を表わす文字列を生成する部分と、ＳＱＬドライバの部分のうち、ＳＱＬ文を表わす文字列からデータベース管理サーバに送るＳＱＬ分を生成する部分と、から構成されることになる。
【００３４】
図１１は、データベース操作システムの処理の流れ図を例示する。図１１（Ａ）は、データベース操作装置の処理の流れ図である。ステップＳ１１０１において、断片列情報を一以上組み合わせる（断片列情報組合ステップ）。ステップＳ１１０２において、組み合わされた断片列情報から、データベース操作命令を生成する（データベース操作命令生成ステップ）。図１１（Ｂ）は、データベース装置の処理の流れ図である。ステップＳ１１０３において、生成されたデータベース操作命令を取得する（操作命令取得ステップ）。「生成されたデータベース操作命令」とは、例えば、ステップＳ１１０２で生成されたものである。ステップＳ１１０４において、取得されたデータベース操作命令に基づいて処理を実行する（実行ステップ）。
【００３５】
（実施形態１：主な効果）
本実施形態により、断片列情報を組み合わせることにより、区切り文字をどこに配置するべきかといったデータベース操作言語についての細かな知識がなくても、データベース操作命令を生成することができる。
【００３６】
（実施形態２）
本発明の実施形態２として、実施形態１のデータベース操作システムにおいて、断片列情報がデータベース３０２の操作言語の文法に対応して階層的に組み合わされることとしたデータベース操作システムについて説明する。
【００３７】
（実施形態２：文法と階層構造）
図１２は、データベース３０２の操作言語の文法を例示する。文法は、「→」の左辺を右辺に置き換えることにより、一定の形の文が生成されることを示す規則である。なお、右辺の「｜」は、これによって区切られるどれか一つに置き換えることを意味する。したがって、「データ操作ＳＱＬ文」は、「ＳＥＬＥＣＴ文」、「ＩＮＳＥＲＴ文」、「ＵＰＤＡＴＥ文」、「ＤＥＬＥＴＥ文」のどれか一つに置き換えられることを意味する。また、「〔」と「〕」とで囲まれた部分は、省略可能なことを表わす。したがって、「ＳＥＬＥＣＴ文」の置き換えにおいては、「ｗｈｅｒｅ  条件式」の部分は省略可能である。また、「原子条件」とは、大小比較や文字列マッチングなどのように、論理演算子を用いて他の条件式から構成されない条件式をいう。
【００３８】
図１３は、「→」の左辺を右辺に置き換える過程を示す図である。図１３で例示されるように、「→」の左辺に現れるものは一つであり、「→」の右辺には複数のものが現われるので、「→」の左辺を右辺に置き換える過程は、木構造、すなわち、階層構造となる。したがって、プログラミング言語において、データ構造を適切に選択することにより、このような階層構造を表現することが可能である。なお、図１３の木構造において、「列並び」として、「Ｎａｍｅ，  Ａｄｄｒｅｓｓ」を用い、テーブル名として「Ｐｅｒｓｏｎ」を用い、２つの「原子条件」として「Ｉｄ>１００」と「Ａｇｅ<４０」を用いることにより、その木構造を図５（Ａ）のＳＱＬ文を生成する過程とみなすことができる。
【００３９】
（実施形態２：階層構造を作る例）
図１４は、オブジェクト指向型のプログラミング言語において、ＳｑｌＳｅｌｅｃｔ、ＳｑｌＣｏｎｄ、ＳｑｌＡｔｏｍｉｃＣｏｎｄ、というデータの型（あるいは「クラス」ともいう）を用いることにより、図１３に例示された図５（Ａ）のＳＱＬ文を生成する過程を示す木構造を生成するプログラムを例示する。
【００４０】
１行目において、"Ｎａｍｅ"と"Ａｄｄｒｅｓｓ"とを表わすＳｔｒｉｎｇ型のデータの配列を作り、Ｓｔｒｉｎｇ型の配列型という型を持つｃｏｌｕｍｎｓという変数に代入する。これは「列並び」の置き換えを表わす。
【００４１】
３行目において、原子条件の一つである「Ｉｄ>１００」をＳｑｌＡｔｏｍｉｃＣｏｎｄという型のデータとして作成し、ｌｅｆｔという変数に代入する。ある種のオブジェクト指向型の言語（例えば、Ｃ＋＋言語やＪａｖａ（登録商標）言語）では、ｎｅｗという演算子とクラスの名前を関数名のようにして使うことにより、そのクラスのインスタンスであるデータを動的に作成することができる。
【００４２】
４行目において、原子条件の一つである「Ａｇｅ<４０」をＳｑｌＡｔｏｍｉｃＣｏｎｄという型のデータとして作成し、ｒｉｇｈｔという変数に代入する。
【００４３】
５行目において、「条件式」から「条件式  ａｎｄ  条件式」への置き換えに対応して、ｌｅｆｔとｒｉｇｈｔを用いてＳｑｌＡｎｄＣｏｎｄという型のデータを作成し、ａｎｄｃｏｎｄという変数に代入する。なお、ａｎｄｃｏｎｄという変数の型は、ＳｑｌＣｏｎｄであり、ＳｑｌＡｎｄＣｏｎｄと異なるが、ＳｑｌＣｏｎｄをＳｑｌＡｎｄＣｏｎｄの上位の型（あるいは親クラスまたは上位クラスともいう）とすることにより、このような代入が可能となる。
【００４４】
７行目において、「ＳＥＬＥＣＴ文」の置き換えを表わすために、ｃｏｌｕｍｎｓと"Ｐｅｒｓｏｎ"とａｎｄｃｏｎｄとの値を用いてＳｑｌＳｅｌｅｃｔという型のデータを作りｓｅｌｓｔｍｔという変数に代入する。
【００４５】
このように型を用いてデータ構造を作成するプログラムを記述することにより、文法に反した文を生成すると型の不適合が置き、プログラムのコンパイルの段階で文法に反した文が生成されようとしていることを検出することができる。例えば、ＳｑｌＡｎｄＣｏｎｄ（ｃｏｌｕｍｎｓ，  ｒｉｇｈｔ）と記述すると、ＳｑｌＡｎｄＣｏｎｄの第一引数は、ＳｑｌＣｏｎｄまたはその下位の型のデータであるという条件に反するので、コンパイルの段階で正しくないことを検出することができる。また、ａｎｄとｏｒあるいは、＊と＋といった演算子の結合の強さを知ることなく意図した式の木構造を作ることが可能である。
【００４６】
また、このような文法における置き換えを示す木構造から文法で記述される文を生成することは当業者にとって通常に行なうことができ、木構造を構成するノードの型にノードの持つ値を文字列に変換するメソッドを用意することで実現することができる。
【００４７】
したがって、例えば、９行目で示されるように、ｓｅｌｓｔｍｔに代入されている値に対して、ｔｏＳｔｒｉｎｇ（）というメソッドを実行することにより、木構造からその木構造が表わす文の文字列を得ることができる。
【００４８】
なお、図１３に例示された木構造において、子を一つしか持たないノード（例えば、データ操作ＳＱＬ文のノード）は、その子ノード（例えば、ＳＥＬＥＣＴ文のノード）と同一視して、図１４のプログラムを記述した。当業者にとっては、同一視しないで、図１３の木構造をそのまま表わすデータ構造をプログラムによって表わすことは容易にできる。
【００４９】
（実施形態２：主な効果）
本実施形態においては、木構造を生成することで、すなわち、階層的な組み合わせによりデータを生成することにより、わかりやすくデータベース操作命令を作成することができる。また、木構造のノードに型を導入することにより、文法に違反していることを、コンパイルを実行することにより検出することができ、データベースを操作するプログラムの信頼性を上げることができる。
【００５０】
（実施形態３）
本発明の実施形態３は、実施形態１または実施形態２に係るデータベース操作システムにおいて、断片列情報組合部での断片列情報の組み合わせは、前記データベースの操作言語でのデータベース操作命令の文字列の記述に代えて行なわれるようにしたデータベース操作システムである。
【００５１】
（実施形態３：特徴）
すなわち、従来、データベースを操作するアプリケーションプログラムの記述においては、データベース操作言語の全体または主要な部分を文字列として埋め込んでいたのであるが、そのような埋め込みを完全に、あるいは可能な限り排除して、断片列情報の組み合わせによりデータベース操作言語を記述するようにしたデータベース操作システムである。なお、「データベース操作言語の主要な部分」とは、その部分を見ることにより、その部分がどのデータベース操作言語の部分であるかが認識できる程度のまとまりを持った部分をいう。例えば、そのデータベース操作言語に特有の予約語を含む部分である。
【００５２】
（実施形態３：主な効果）
本実施形態においては、文字列によるデータベース操作言語の全体または主要な部分の記述が排除されるため、データベース操作システムの信頼性を向上させることができる。
【００５３】
（実施形態４）
本発明の実施形態４として、データベース操作言語の種類を入力し指定することができるデータベース操作システムについて説明する。
【００５４】
（実施形態４：構成）
図１５は、本実施形態に係るデータベース操作システムのデータベース操作装置の機能ブロック図を例示する。データベース操作装置１５００は、断片列情報組合部４０１と、データベース操作命令生成部４０２と、操作言語指定入力部１５０１と、を有する。また、本実施形態においては、断片列情報はデータベース３０２の操作言語の文法に対応して階層的に組み合わされてもよい。また、断片列情報の組み合わせは、データベース操作命令の文字列の記述に代えて行なわれるものであってもよい。したがって、本実施形態に係るデータベース操作システムのデータベース操作装置は、実施形態１から３のいずれか一に係るデータベース操作システムのデータベース操作装置が、操作言語指定入力部１５０１を有する構成となっている。
【００５５】
「操作言語指定入力部」１５０１は、指定情報を入力する。「指定情報」とは、データベース３０２の操作言語の種類を指定する情報である。「データベース３０２の操作言語の種類」とは、データベース３０２が決まると決定される操作言語の種類をいう。この操作言語の種類は、データベース３０２のベンダーが決定することにより決まる場合もあれば、また、ベンダーが決まっても、そのベンダーのデータベースのバージョンによってさらに決定する必要がある場合がある。
【００５６】
本実施形態においては、データベース操作命令生成部４０２は、操作言語指定入力部１５０１に入力された指定情報に基づいて、データベース操作命令を生成する。なお、操作言語指定入力部１５０１による指定情報の入力は、断片列情報組合部４０１による断片列情報の組み合わせの前であっても後であってもよく、また、データベース操作命令生成部４０２によるデータベース操作命令の生成の直前であってもよい。通常は、データベース操作装置１５００が起動した直後に指定情報の入力が行なわれる。
【００５７】
図１６は、指定情報の例を示す。図１６（Ａ）は、データベース３０２のベンダーの種類などを表わしており、ベンダーの種類によりデータベース３０２の操作言語が特定される。図１６（Ｂ）は、データベース３０２のベンダーを指定では、操作言語の種類が特定されず、操作言語のバージョンを指定する例である。
【００５８】
（実施形態４：主な効果）
このように指定情報によりデータベースの操作言語の種類が特定されることにより、様々なデータベース３０２に対応することができ、データベース３０２の交換に対応することができる。例えば、図１７は、ＳＱＬ以外のリレーショナルデータベースの操作言語の例を示している。この例で示されている操作言語は、図５（Ａ）に示されたＳＱＬ文と同じ意味を持つが、見かけが大きく異なる。例えば、図５（Ａ）に示されたＳＱＬ文では、最初に列の指定が来るが、図１７の操作言語では、列の指定が最後に来て、条件が「［」と「］」とで囲まれて表現される。しかし、このように見かけが異なっていても、リレーショナルデータベース理論に基づくデータベースであれば、指定情報による指定に基づいて、断片列情報からそれぞれの種類のデータベース操作命令を生成することができる。
【００５９】
また、あるデータベースにおいては、システムにより管理される現在の日付を取得するために「ｓｙｓｄａｔｅ」という予約語のみが使用されるが、別のデータベースでは、「ｇｅｔｄａｔｅ（）」という関数呼び出しの形式が使用される。また、あるデータベースでは、排他制御を行なうためにｓｅｌｅｃｔ文の最後に「ｆｏｒ  ｕｐｄａｔｅ」を明示的に付加しなければならないが、別のデータベースでは、そのような付加は不要であり、反対に文法エラーとなってしまう。本実施形態では、このような違いに指定情報を変更するだけで対応が可能である。
【００６０】
（実施形態５）
本発明の実施形態５として、条件の指定が柔軟に行なえるデータベース操作システムについて説明する。
【００６１】
（実施形態５：構成）
本発明においては、実施形態１から３のいずれか一の実施形態において、断片列情報には、条件断片列情報が含まれる。「条件断片列情報」とは、データベース操作命令の条件を指定する断片列情報である。例えば、図１４において例示したＳｑｌＡｔｏｍｉｃＣｏｎｄ、ＳｑｌＣｏｎｄがある。さらに、条件断片列情報は、文字列によって表現された条件を指定可能であるとする。
【００６２】
図１８は、そのような文字列によって表現された条件を指定可能とする条件断片列情報を生成するプログラムの例を示す。ＳｑｌＦｒｅｅＣｏｎｄによって、Ｔ１．Ａ  ｉｎ  （ｓｅｌｅｃｔ  Ｔ２．Ａ  ｆｒｏｍ  Ｔ２）という文字列で表現された条件が指定されている。
【００６３】
（実施形態５：主な効果）
本実施形態により、文字列で表現された条件を指定可能とすることにより、データベース３０２ごとに適応した条件を生成することができる。例えば、データベース３０２ごとに検索の操作命令を処理するオプティマイザ（問い合わせの最適化器）に癖があることが知られているが、その癖に対応して効率的な操作命令を生成することが可能となる。
【産業上の利用可能性】
【００６４】
本発明に係るデータベース操作システムは、アプリケーションプログラムの記述で使用される言語とは一般的には異なるデータベースの操作言語について深い理解がなくても、データベースにアクセスするアプリケーションプログラムを作成することが可能となり、また、アプリケーションプログラムの信頼性を向上させることができるなどの効果を有し、産業上有用である。
【図面の簡単な説明】
【００６５】
【図１】データベースを操作するアプリケーションプログラムの動作を示す図
【図２】アプリケーションプログラムの記述のうち、データベースを操作する部分の一例図
【図３】本発明の実施形態１に係るデータベース操作システムの機能ブロック図
【図４】本発明の実施形態１に係るデータベース操作システムのデータベース操作装置の機能ブロック図
【図５】ＳＱＬ文と断片列情報の組み合わせの一例図
【図６】断片列情報を表わすデータ構造の記述の一例図
【図７】断片列情報の組み合わせを作りだすプログラムの一例図
【図８】プログラムにより断片列情報が組合されていく過程の一例図
【図９】データベース操作命令を生成する処理の流れ図
【図１０】本発明の実施形態１に係るデータベース操作システムのデータベースの機能ブロック図
【図１１】データベース操作システムの処理の流れ図
【図１２】データベース操作言語の文法の一例図
【図１３】文法による置き換えの過程の一例図
【図１４】ＳＱＬ文を生成する過程を示す木構造を生成するプログラムの一例図
【図１５】本発明の実施形態４に係るデータベース操作システムのデータベース操作装置の機能ブロック図
【図１６】指定情報の一例図
【図１７】ＳＱＬ以外のデータベース操作命令の一例図
【図１８】文字列によって表現された条件を指定可能とする条件断片列情報を生成するプログラムの一例図
【符号の説明】
【００６６】
４００  データベース操作装置
４０１  断片列情報組合部
４０２  データベース操作命令生成部
【図１】
2006004146.tif 000003
【図２】
2006004146.tif 000004
【図３】
2006004146.tif 000005
【図４】
2006004146.tif 000006
【図５】
2006004146.tif 000007
【図６】
2006004146.tif 000008
【図７】
2006004146.tif 000009
【図８】
2006004146.tif 000010
【図９】
2006004146.tif 000011
【図１０】
2006004146.tif 000012
【図１１】
2006004146.tif 000013
【図１２】
2006004146.tif 000014
【図１３】
2006004146.tif 000015
【図１４】
2006004146.tif 000016
【図１５】
2006004146.tif 000017
【図１６】
2006004146.tif 000018
【図１７】
2006004146.tif 000019
【図１８】
2006004146.tif 000020