(57)【要約】【課題】  システム性能を向上させる。【解決手段】  要求受付サーバ１０５上で組込みモジュール１１７を実行することによって実行時入力情報１１２を取得し、それを複数の実行サーバ１０６上の実行時入力情報１２４に複写し、その実行時入力情報１２４を利用して複数の実行サーバ１０６は組込みモジュール１２５を実行する。【選択図】  図１
2005135429.tif 000002
【特許請求の範囲】
【請求項１】
データベースに接続された処理装置が実行する情報処理方法において、
前記データベースに対する問い合わせを入力し、
前記入力された問い合わせを解析し、
前記解析結果に基づいて、それぞれの処理を実行するためのデータ処理プログラムに、処理すべきデータを受け渡すかどうかを判定し、
前記判定の結果、前記データを受け渡す場合は、前記データの構造を示すデータ構造情報を参照して、前記データから前記データ処理プログラムに受け渡すデータを生成し、
前記問い合わせに基づいた実行手順コードと前記生成したデータを前記データ処理プログラムに出力することを特徴とする情報処理方法。
【請求項２】
請求項１記載の情報処理方法において、
前記出力するデータは、前記実行手順コードと前記生成したデータとを一つにパッケージして、前記データ処理プログラムに受け渡すことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム性能を向上することが出来るデータベース管理方法および並列データベース管理システムに関する。
【背景技術】
【０００２】
図１０に、従来のデータベースシステムの一例の構成概念図を示す。このデータベースシステム１０００は、ＳＧＭＬ（Standard Generalized Markup Language；標準一般化マーク付け言語）文書を管理するためのシステムであり、データベース管理システム１１０２と、記憶装置１１２６および１１２８とを具備している。
【０００３】
前記データベース管理システム１１０２は、ユーザ問合せ１０４を受け付ける要求受付サーバ１１０５と、その要求受付サーバ１１０５からの指示に従ってデータベース処理を実行する複数の実行サーバ１１０６と、システムの定義情報を管理するディクショナリサーバ１１０７と、これらのサーバ１１０５，１１０６，１１０７を接続する通信路１０８とを具備している。
【０００４】
ＳＧＭＬ文書の例として次の定義を用いる。
CREATE TYPE sgmltext_t (
text BLOB,
FUNCTION extract ( sgmltext_t, 
VARCHAR )
RETURNS BLOB
LANGUAGE C
EXTERNAL NAME 'p_sgml_extract';
);
CREATE TABLE reports (
published_date  DATE,
contents        sgmltext_t );
なお、上記の例は、ＳＱＬ３（Structured Query Language;構造化問合せ言語）によって記述されている。
【０００５】
ユーザは、ＳＧＭＬで記述されたデータ（以下、ＳＧＭＬテキストと略す）をＡＤＴ型（Abstruct Data Type；抽象データ型）の sgmltext_t 型を用いて管理する。この sgmltext_t 型は、ＢＬＯＢ（Binary Large Object ）型の text を構成要素とする。
【０００６】
また、ユーザのデータベースモデルにおける「報告書」に対応するデータの構造をテーブルreports を用いて表わす。さらに、「報告書」が「発行日」と「報告内容」とを構成要素とすることに対応させて、テーブルreports がＤＡＴＥ型のカラムpublished_date と sgmltext_t 型のカラムcontents からなるように定義する。大量のＳＧＭＬ文書を並列に処理できるように、テーブルreports のレコードおよびＳＧＭＬテキストは、実行サーバ１１０６がアクセスする記憶装置１１２６に保持されている。なお、「報告書」を「発行日」による条件で高速検索できるように、実行サーバ１１０６が提供する一般的なインデクス機能を用いて、テーブルreports のカラムpublished_date にインデクスを設定する。
【０００７】
ＡＤＴ関数extract() は、ＳＧＭＬテキストの中からタグで区切られるテキストデータを抽出する関数であり、ＳＧＭＬテキストおよび抽出する部分を指定するタグ名を入力情報とし、sgmltext_tの型を持つデータに対して適用でき、Ｃ言語で記述された外部関数p_sgml_extract に関連付けられている。
【０００８】
外部関数p_sgml_extract()は、前記ＡＤＴ関数extract() を実現する関数として定義されている。前記実行サーバ１１０６には、ＳＧＭＬ文書データ管理機能を実現するための組込みモジュール１１２５が組み込まれている。この組込みモジュール１１２５には、前記外部関数p_sgml_extract()を実現するためのコード１００１が含まれている。
【０００９】
前記ディクショナリサーバ１１０７がアクセスする記憶装置１２８には、抽出パラメタ１００２が保持されている。この抽出パラメタ１００２は、指定されたタグで区切られるテキストデータをＳＧＭＬ文書から抽出するために用いられる制御情報である。また、抽出パラメタは、抽出したテキストデータをＳＧＭＬ文
書として構造化するための構造情報を含んでおり、抽出結果を作成するためには不可欠な情報である。抽出パラメタは、ＳＧＭＬ文書構造に基づいており、同一のＳＧＭＬ文書構造を有するＳＧＭＬテキストに対して共通に利用する。「報告書」での「報告内容」の形式すなわち文書構造を固定とするように、ＳＧＭＬ文書構造は、ＳＧＭＬテキストを保持するカラムによって固定とする。これに従って、抽出パラメタ１００２は、処理対象のＳＧＭＬテキストを保持しているカラムによって固定とする。そこで、テーブル名とカラム名から抽出パラメタ１００２を取得できるように、ディクショナリサーバ１１０７の機能を用いて抽出パラメタ１００２を一元管理する。
【００１０】
抽出処理は次の手順で行なう。
(１)ディクショナリサーバ１１０７にアクセスし、操作対象のＳＧＭＬテキストを保持しているテーブル名とカラム名をもとに抽出パラメタを取得する。
(２)上記の(１)で取得した抽出パラメタを利用して抽出処理を行なう。
【００１１】
上記の手順(１)(２)の実行制御は、組込みモジュール１１２５が行なう。
【００１２】
次に、検索処理について説明する。検索要求「発行日が１９９６年１０月１５日より最近の報告書のアブストラクト部分を抽出せよ」は、次のように記述する。
SELECT extract(contents, 'abstract')
FROM   reports
WHERE  published_date > '1996-10-15'
なお、上記の例は、ＳＱＬ３によって記述されている。
【００１３】
上記検索要求に見合うデータベース処理は、次のような手順で行なう。
(１)カラムpublished_date に設定されたインデクスを用いて、WHERE句の条件を満たすレコードの集合をテーブルreports から取得する。
(２)上記の(１)で得られたレコードの集合を基にＳＧＭＬテキストを逐次取り出し、ＡＤＴ関数extract() を実現する外部関数p_sgml_extract()をコールして、アブストラクト部分を抽出する。
【００１４】
上記の(２)でＳＧＭＬテキストを逐次取り出してアブストラクト部分を抽出する処理については、並列処理機能を有効に利用して高速に処理すること及び要求受付サーバ１１０５に検索結果をまとめるときのデータ転送量を少なくすることを考慮して、実行サーバ１１０６で行なう。すなわち、実行サーバ１１０６では、アブストラクト部分を抽出するために外部関数p_sgml_extract()をコールし、組込みモジュール１１２５に実行制御を渡す。実行制御が渡された組込みモジュール１１２５は、ディクショナリサーバ１１０７にアクセスして抽出パラメタを取得する。そして、その抽出パラメタを利用して抽出処理を行なう。
【００１５】
なお、データベース管理システム（ＤＢＭＳ）に関する他の従来技術として次のものがある。
(１)並列データベース処理
例えば、特開平８−１３７９１０号公報に記載されているように、ユーザの問い合わせを処理プロセッサが受け付け、複数のデータベースエンジンプロセッサで最適に負荷が分散されるようにＤＢＭＳが実行制御を行なう。
(２)ＳＱＬ３
ＳＱＬ３は、国際標準化機構ＩＳＯが標準化をすすめているデータベース言語仕様の草案であり、例えば「"Information technology - Database languages - SQL - Part 2: SQL/Foundation"ISO/IEC JTC1/SC21 N10489」に記載されている。
(３)オブジェクト・リレーショナルＤＢＭＳ
オブジェクト指向の概念を取り入れたリレーショナルＤＢＭＳである。例えば「オブジェクトリレーショナルＤＢＭＳs，Ｍichael Ｓtonebraker著，大田佳伸訳，インターナショナル・トムソン・パブリッシング・ジャパン１９９６年８月」に記載されており、ＳＱＬ３のＡＤＴおよびＡＤＴ関数に対応付けることがで
きるユーザ定義型およびユーザ定義関数を使用可能にすべきであることが述べられている。次の例は、ユーザ定義の複合型phone_t の定義文である。
create type phone_t (
area         varchar(3),
number       varchar(7),
description  varchar(20) );
上記の例は、複合型phone_t が、 area という名前で参照される３バイト以下の可変文字列型の要素と、 number という名前で参照される７バイト以下の可変文字列型の要素と、description という名前で参照される２０バイト以下の可変文字列型の要素の３つの要素から構成されることを示している。
【００１６】
次の例は、ユーザ定義関数Northness_equal() の定義文である。
create function Northness_equal (point, point) returns Boolean
with selfunc = selectivity_comp
external name '/usr/Northness_equal'
language C;
上の例は、ユーザ定義関数Northness_equal() が、Ｃ言語で記述された外部関数/usr/Northness_equal に関連付けられていることを示している。
(４)関数定義の指定
例えば「共通オブジェクトリクエスト・ブローカ  〜構造と仕様〜，オブジェクトマネジメントグループ編著， 相磯秀夫監訳，社団法人 日本オフィスオートメーション協会，原本 "The Common Object Request Broker:Architecture and Specification" OMG Document Number 91.12.1, Revision 1.1」に記述されているようなＩＤＬ（Interface Definition Language;インタフェイス定義言語）を用いる関数定義の指定方法がある。この方法では、ＣＯＲＢＡと呼ばれるソフトウエアアーキテクチャにおいて、モジュール間のインタフェイスをＩＤＬによって定義する。そのインタフェイスをＣ言語などのプログラミング言語に対応付け、スタブと呼ばれる接続用のモジュールを生成する。このスタブモジュールを介することによって、柔軟なモジュール間通信を可能としている。
【００１７】
【非特許文献１】"Information technology - Database languages - SQL - Part 2: SQL/Foundation"ISO/IEC JTC1/SC21 N10489
【非特許文献２】共通オブジェクトリクエスト・ブローカ  〜構造と仕様〜，オブジェクトマネジメントグループ編著， 相磯秀夫監訳，社団法人 日本オフィスオートメーション協会，原本 "The Common Object Request Broker:Architecture and Specification" OMG Document Number 91.12.1, Revision 1.1
【発明の開示】
【発明が解決しようとする課題】
【００１８】
前記従来のデータベースシステム１０００では、次のような問題がある。すなわち、前記検索要求に見合うデータベース処理では、並列処理する複数の実行サーバ１１０６上の組込みモジュール１２５の全てから１つのディクショナリサーバ１１０７に対するアクセスが発生し、ディクショナリサーバ１１０７で抽出パラメタを取り出す処理を集中して行なうことになる。このため、ディクショナリサーバ１１０７の負荷が一時的に過大となり、ディクショナリサーバ１１０７の処理性能がネックとなって、システム性能が低下してしまう。そこで、本発明の第１の目的は、上記の問題を解消し、システム性能を向上させることが出来るデータベース管理方法および並列データベース管理システムを提供することにある。
【００１９】
また、前記ＩＤＬの仕様では、組込みモジュールの実行制御を行なうことを直接指定することができない問題がある。そこで、本発明の第２の目的は、組込みモジュールの実行制御を行なうことを
直接指定可能するデータベース管理方法を提供することにある。
【課題を解決するための手段】
【００２０】
第１の観点では、本発明は、ユーザからの要求を受け付けてその要求に見合うデータベース処理の実行手順を指示する実行手順コードを作成する要求受付サーバと前記実行手順コードに従って前記データベース処理を並列に実行する複数の実行サーバとを有し、ユーザによって組み込まれる組込みモジュールを実行する機能を前記要求受付サーバと前記実行サーバとが有する並列データベース管理システムにおいて、前記実行サーバ上で組込みモジュールを実行する際に必要な入力情報を前記要求受付サーバが取得すべきことを認識する解析過程と、前記認識に従って前記要求受付サーバ上で入力情報取得用の組込みモジュールを実行して前記入力情報を取得する取得過程と、前記入力情報を渡す指示を含ませるように前記実行手順コードを編集する設定過程とを含むデータベース実行制御を行なうことを特徴とするデータベース管理方法を提供する。上記第１の観点によるデータベース管理方法では、複数の実行サーバ上の組込みモジュールが必要とする入力情報のうちで、いずれの実行サーバでも同一のものは、それぞれの実行サーバが取得するのではなく、要求受付サーバが取得し、
それをそれぞれの実行サーバが利用する。このため、入力情報を取得する処理の重複や集中がなくなり、システム性能の低下を防止できる。
【００２１】
第２の観点では、本発明は、上記構成のデータベース管理方法において、組込みモジュールのインタフェイス仕様の記述をもとに組込みモジュールの実行制御を行なうことを特徴とするデータベース管理方法を提供する。上記第２の観点によるデータベース管理方法では、組込みモジュールの実行制御をインタフェイス仕様の記述をもとに行うが、このインタフェイス仕様の記述をユーザが行えるから、結局、組込みモジュールの実行制御を行なうことをユーザが直接指定できることとなる。そして、インタフェイス仕様の記述に、ユーザによる組込みモジュールの機能呼び出しで渡される入力情報以外の付加的な入力情報を当該組込みモジュールの実行のために渡す指示または実行サーバ上で組込みモジュールを実行する際に必要な入力情報を要求受付サーバが取得すべきことの指示の少なくとも一方を含ませれば、前記第１の観点によるデータベース管理方法を好適に実施できる。
【００２２】
第３の観点では、本発明は、上記構成のデータベース管理方法において、ユーザによる組込みモジュールの機能呼び出しで渡される入力情報以外の付加的な入力情報を当該組込みモジュールの実行のために渡す指示を当該組込みモジュールのインタフェイス仕様の記述に含み得ることを特徴とするデータベース管理方法を提供する。上記第３の観点によるデータベース管理方法では、組込みモジュールの実行制御のもととなるインタフェイス仕様の記述に、ユーザによる組込みモジュールの機能呼び出しで渡される入力情報以外の付加的な入力情報を当該組込みモジュールの実行のために渡す指示を含ませるから、前記第１の観点によるデータベース管理方法を好適に実施できる。
【００２３】
第４の観点では、本発明は、上記構成のデータベース管理方法において、前記実行サーバ上で組込みモジュールを実行する際に必要な入力情報を前記要求受付サーバが入力情報取得用の組込みモジュールを実行して取得すべきことを示す指示を前記実行サーバ上で実行する組込みモジュールまたは前記入力情報取得用の組込みモジュールの少なくとも一方のインタフェイス仕様の記述に含み得ることを特徴とするデータベース管理方法を提供する。
【００２４】
上記第４の観点によるデータベース管理方法では、組込みモジュールの実行制御のもととなるインタフェイス仕様の記述に、実行サーバ上で組込みモジュールを実行する際に必要な入力情報を要求受付サーバが取得すべきことの指示を含ませるから、前記第１の観点によるデータベース管理方法を好適に実施できる。
【００２５】
第５の観点では、本発明は、ユーザからの要求を受け付ける要求受付サーバとその要求受付サーバの指示に従ってユーザからの要求に見合うデータベース処理を並列に実行する複数の実行サーバとを有する並列データベース管理システムにおいて、前記要求受付サーバが入力情報取得用の組込みモジュールを実行して入力情報を取得し、前記実行サーバが前記入力情報を用いて組込みモジュールを実行することを特徴とする並列データベース管理システムを提供する。上記第５の観点によるデータベース管理システムでは、複数の実行サーバ上の組込みモジュールが必要とする入力情報のうちで、いずれの実行サーバでも同一のものは、それぞれの実行サーバが取得するのではなく、要求受付サーバが取得し、それをそれぞれの実行サーバが利用する。このため、入力情報を取得する処理の重複や集中がなくなり、システム性能の低下を防止できる。
【発明の効果】
【００２６】
本発明のデータベース管理方法および並列データベース管理システムによれば、複数の実行サーバ上の組込みモジュールが必要とする入力情報のうちで、いずれの実行サーバでも同一のものは、それぞれの実行サーバが取得するのではなく、要求受付サーバが取得し、それをそれぞれの実行サーバが利用するので、入力情報を取得する処理の重複や集中を防止でき、システム性能を向上できる。また、組込みモジュールの実行制御を、組込みモジュールのインタフェイス仕様の記述において指示できるようになる。
【発明を実施するための最良の形態】
【００２７】
以下、図を用いて本発明の実施の一形態を詳細に説明する。図１は、本発明にかかるデータベースシステムの構成図である。このデータベースシステム１００は、データベースを利用するアプリケーションプログラム１０１と、データベース管理システム１０２と、記憶装置１２６，１２８および１４０とを具備している。
【００２８】
前記アプリケーションプログラム１０１は、一般的なデータベースシステムの運用で行われているように、以下の手順にて作成される。
(１)ユーザがデータベース言語（この例ではＳＱＬ３とする）によって問合せ文記述する。
(２)上記の(１)の記述を入力とし、データベース管理システム１０２が提供するアプリケーションプログラム作成ツールを用いて、問合せ処理を要求するプログラムのソースコードを生成する。
(３)上記の(２)のソースコードを適当なプログラミング言語コンパイラでコンパイルし、アプリケーションプログラム１０１を得る。
【００２９】
前記アプリケーションプログラム１０１は、データベース管理システム１０２が提供する問合せ処理要求関数１０３をコールする。この問合せ処理要求関数１０３をコールするときに、ユーザ問合せ１０４を入力とする。そして、問合せ要求関数１０３は、データベース管理システム１０２（の要求受付サーバ１０５の問合せ処理制御部１０９）に、ユーザの問合せを伝える。
【００３０】
前記データベース管理システム１０２は、前記アプリケーションプログラム１０１からの要求を受け付ける要求受付サーバ１０５と、ユーザからの要求に見合うデータベース処理を並列に実行する複数の実行サーバ１０６と、システムの定義情報を管理するディクショナリサーバ１０７と、これらのサーバ１０５，１０６，１０７を接続する通信路１０８と、組込みモジュール定義登録ツール１３２とを具備している。
【００３１】
前記要求受付サーバ１０５は、前記アプリケーションプログラム１０１からの要求を受け付けて当該要求に見合う処理の実行制御を行なう問合せ処理制御部１０９と、受け付けた問合せ処理要求を解析する問合せ解析部１１０と、問合せ解析部１１０の解析結果をもとにしてユーザの要求に見合ったデータベース処理の実行手順を指示する実行手順コード１１１および実行サーバ１０６で処理を実行するときに入力情報として渡す実行時入力情報１１２を実行用ワークエリア１１３に作成する実行手順コード作成部１１４と、前記実行手順コード１１１および前記実行時入力情報１１２をもとに実行サーバ１０６にデータベース処理を行なうように指示する実行指示部１１５と、入力情報取得用の組込みモジュール１１７と、前記実行指示部１１５の指示に応じて実行サーバ１０６が返却する処理結果を保持する実行結果保持部１１８とを具備している。
【００３２】
前記実行指示部１１５は、組込みモジュール１１７を実行して前記実行時入力情報１１２を取得する処理の制御を行なうパラメタバインド制御部１１６を含んでいる。なお、パラメタバインド制御部１１６によって組込みモジュール１１７を実行して前記実行時入力情報１１２を決定することを「パラメタバインド」と呼ぶ。前記組込みモジュール１１７は、このパラメタバインドを行なうコードを保持している。
【００３３】
前記組込みモジュール定義登録ツール１３２は、組込みモジュール１１７，１２５のインタフェイス仕様を記述するための組込みモジュールインタフェイス定義言語を提供し、この組込みモジュールインタフェイス定義言語によって記述された組込みモジュール仕様記述１３１を解析し、その解析結果をもとに組込みモジュール定義情報１３０をディクショナリサーバ１０７に登録する。
【００３４】
前記実行サーバ１０６は、前記要求受付サーバ１０５の実行指示部１１５からの指示を受信しその指示に従った処理を行なうように制御する実行制御部１１９と、前記要求受付サーバ１０５の実行指示部１１５から送信される実行手順コード１１１および実行時入力情報１１２を実行手順コード１２３および実行時入力情報１２４として保持するための実行用ワークエリア１２０と、前記記憶装置１２６に格納しているデータベースファイル１２１への入出力および実行サーバ１０６上でのデータの取り扱いを管理するためのデータアクセス管理部１２２と、実行サーバ１０６において実行する外部関数からなる組込みモジュール１２５とを具備している。
【００３５】
前記ディクショナリサーバ１０７は、データベースシステム１００に関する定義情報を管理する定義情報管理部１２７を具備している。前記定義情報は、記憶装置１２８に格納されており、ユーザ定義関数情報１２９と組込みモジュール定義情報１３０とからなる。これらユーザ定義関数情報１２９および組込みモジュール定義情報１３０の詳細については、後で図４を参照して説明する。
【００３６】
このデータベースシステム１００におけるユーザの問合せは、次の手順で処理される。
(１)アプリケーションプログラム１０１からの要求を要求受付サーバ１０５が受け付ける。
(２)要求受付サーバ１０５が要求に見合った処理を実行サーバ１０６に指示する。
(３)実行サーバ１０６が要求に見合った処理を実行し、実行結果を要求受付サーバ１０５の実行結果保持部１１８に通信路１０８を介して直接送信する。これにより処理結果が要求受付サーバ１０５の実行結果保持部１１８に保持される。
(４)アプリケーションプログラム１０１からの処理結果取り出しの要求を要求受付サーバ１０５が受け付ける。
(５)要求受付サーバ１０５が、実行結果保持部１１８で保持している実行結果をアプリケーションプログラム１０１に返す。
【００３７】
図２は、問合せ処理制御部１０９がアプリケーションプログラム１０１からの問合せ要求に応じて行なう問合せ処理の流れ図である。この問合せ処理の入力はユーザ問合せ１０４であり、出力および処理結果は実行結果保持部１１８に実行結果を保持させることである。ステップ２０１では、問合せ処理制御部１０９は、問合せ解析部１１０を用いてユーザ問合せ１０４を解析する。この解析の結果、実行手順コードパターン選定結果を取得する。このステップ２０１の問合せ解析処理の詳細については、後で図３を参照して説明する。ステップ２０２では、問合せ処理制御部１０９は、前記ステップ２０１で取得した実行手順コードパターン選定結果を基に実行手順コード作成部１１４を用いて実行手順コード１１１を作成する。この実行手順コード１１１の詳細については、後で図５を参照して説明する。また、このステップ２０２の実行コード作成処理の詳細については、後で図６を参照して説明する。ステップ２０３では、問合せ処理制御部１０９は、前記ステップ２０２で取得した実行手順コード１１１を基に実行指示部１１５を用いて実行サーバ１０６にユーザの要求に見合った処理を行なうように指示する。そして、処理を終了する。このステップ２０３の実行指示処理の詳細については、後で図７を参照して説明する。
【００３８】
図３は、前記ステップ２０１の問合せ解析処理を示す流れ図である。この問合せ解析処理（２０１）の入力はユーザ問合せ１０４であり、出力および処理結果は実行手順コードパターン選定結果とパラメタバインド指示情報リストである。ステップ３０１では、問合せ解析部１１０は、ユーザ問合せ１０４の構文解析および意味解析を行なう。すなわち、ユーザ問合せ１０４の中でＡＤＴ関数がコールされているか，どんな型のデータを操作対象としているか等が解析される。このステップ３０１の処理は、一般的なＳＱＬの構文解析および意味解析の手法をもとにＳＱＬ３の記述に対応するよう拡張した形態でよい。ステップ３０２では、問合せ解析部１１０は、前記ステップ３０１によって解析した結果をもとにディクショナリサーバ１０７の定義情報管理部１２７にアクセスし、ユーザ定義関数情報１２９および組込みモジュール定義情報１３０を参照し、ＡＤＴ関数と外部関数の対応を調べて、組込みモジュールの実行形態を解析する。このステップ３０２が、「実行サーバ上で組込みモジュールを実行する際に必要な入力情報を要求受付サーバが取得すべきことを認識する解析過程」に相当する。ステップ３０３では、問合せ解析部１１０は、前記ステップ３０２の解析結果をもとにユーザの要求に見合ったデータベース処理の実行手順コードパターンを選定し、実行手順コードパターン選定結果を生成する。そして、処理を終了する。
【００３９】
図４は、ユーザ定義関数情報１２９および組込みモジュール定義情報１３０の構成図である。ユーザ定義関数情報１２９は、ＡＤＴ関数と外部関数との対応付けを保持するＡＤＴ関数−外部関数テーブル４０１と、ＡＤＴ関数パラメタの構成情報を保持するＡＤＴ関数パラメタテーブル４０２とからなる。前記ＡＤＴ関数−外部関数テーブル４０１は、ＡＤＴ関数名，ＡＤＴ型名および外部関数名を示すカラムからなる。ＡＤＴ関数−外部関数テーブル４０１のレコード４０３は、ＡＤＴ関数extract() が、sgmltext_t型に定義され、外部関数p_sgml_extract()に対応付けられることを表わしている。このレコード４０３を参照することにより、問合せ解析部１１０は、ユーザ問合せ１０４においてＡＤＴ関数extract() を実行するよう要求されている場合、外部関数p_sgml_extract()をコールしなければならない、という解釈を行なう。前記ＡＤＴ関数パラメタテーブル４０２は、ＡＤＴ関数名，パラメタ番号，パラメタ型を示すカラムからなる。ＡＤＴ関数パラメタテーブル４０２のレコード４０４は、ＡＤＴ関数extract() の第１パラメタのパラメタ型がsgmltext_tであることを表わしている。ここで、ＡＤＴ関数の第１パラメタで受け渡すパラメタ値は、当該ＡＤＴ関数が処理対象とするＡＤＴ型のデータとする。ＡＤＴ関数パラメタテーブル４０２のレコード４０５は、ＡＤＴ関数extract() の第２パラメタのパラメタ型がVARCHAR であることを表わす。意味的には、ＡＤＴ関extract() の第２パラメタで受け渡すパラメタ値は、抽出部分を指定するタグの名称である。すなわち、ＡＤＴ関数extract() は、この第２パラメタで指定されたタグによって区切られたＳＧＭＬ文書の部分を抽出する。前記ＡＤＴ関数パラメタテーブル４０２のレコード４０４およびレコード４０５を参照することにより、問合せ解析部１１０は、ユーザ問合せ１０４におけるＡＤＴ関数extract() のsgmltext_t型および VARCHAR型の２つのパラメタを解析する。
【００４０】
組込みモジュール定義情報１３０は、組込みモジュール１１７，１２５に含まれる外部関数とその外部関数に関する修飾情報を保持する外部関数テーブル４０６と、組込みモジュール１１７，１２５に含まれる外部関数のパラメタに関する情報を保持する外部関数パラメタテーブル４０７とからなる。前記外部関数テーブル４０６は、外部関数名および関数修飾を示すカラムからなる。外部関数テーブル４０６のレコード４０８は、関数修飾のカラム値に外部関数修飾子「ＡＤＴ関数対応」を保持することにより、外部関数p_sgml_extract()がＡＤＴ関数に対応付けられた外部関数であることを示している。外部関数テーブル４０６のレコード４０９は、関数修飾のカラム値に外部関数修飾子「パラメタバインド」を保持することにより、外部関数p_sgml_load_sgmldef() がパラメタバインドを行なうための外部関数であることを示している。
【００４１】
前記外部関数パラメタテーブル４０７は、外部関数名，パラメタ番号，パラメタ型およびパラメタ修飾を示すカラムからなる。外部関数パラメタテーブル４０７のレコード４１０は、外部関数p_sgml_extract()の第１パラメタがパラメタ型sgmltext_tのパラメタ値を受け渡すことを示している。外部関数パラメタテーブル４０７のレコード４１１は、外部関数p_sgml_extract()の第２パラメタがパラメタ型VARCHAR のパラメタ値を受け渡すことを示している。なお、問合せ解析部１１０は、上記の外部関数p_sgml_extract()の第１パラメタおよび第２パラメタについては、それぞれＡＤＴ関数の第１パラメタおよび第２パラメタのパラメタ値をそのまま受け渡す、という解釈を行なう。これは、前記ＡＤＴ関数−外部関数テーブル４０１のレコード４０３，前記ＡＤＴ関数パラメタテーブル４０２のレコード４０４およびレコード４０５を参照することにより、外部関数p_sgml_extract()がＡＤＴ関数extract() と対応付けられているからである。
【００４２】
外部関数パラメタテーブル４０７のレコード４１２は、外部関数p_sgml_extract()の第３パラメタがパラメタ型BLOBのパラメタ値を受け渡すことを示している。また、パラメタ修飾のカラム値にパラメタ修飾子「返却」を保持することにより、当該第３パラメタのパラメタ値を当該関数の返却値として受け渡すことを示
している。外部関数パラメタテーブル４０７のレコード４１３は、外部関数p_sgml_extract()の第４パラメタがパラメタ型BLOBのパラメタ値を受け渡すことを示している。また、パラメタ修飾のカラム値にパラメタ修飾子「パラメタバインド p_sgml_load_sgmldef」を保持することにより、外部関数p_sgml_load_sgmldef() によってパラメタバインドを行なう、すなわち、外部関数p_sgml_load_sgmldef() が返却する値を当該パラメタ値とすることを示している。外部関数パラメタテーブル４０７のコード４１４は、外部関数p_sgml_load_sgmldef() の第１パラメタがパラメタ型BLOBのパラメタ値を受け渡すことを示している。また、パラメタ修飾のカラム値にパラメタ修飾子「返却」を保持すること
により、当該第１パラメタのパラメタ値を当該関数の返却値として受け渡すことを示している。外部関数パラメタテーブル４０７のレコード４１５は、外部関数p_sgml_load_sgmldef() の第２パラメタがパラメタ型DBCOLUMNINFOのパラメタ値を受け渡すことを示している。ここで、パラメタ型DBCOLUMNINFOは、データベース管理システム１０２が提供する、カラムに関する定義情報を表すためのデータ型である。パラメタ型DBCOLUMNINFOが指定された場合は、問合せ処理制御部１０９が、そのパラメタ値として、処理対象となっているカラムの定義情報を渡すように処理する。
【００４３】
機能的には、外部関数p_sgml_extract()は、抽出パラメタを入力として、指定されたタグの部分を抽出する関数である。また、外部関数p_sgml_load_sgmldef() は、パラメタ型DBCOLUMNINFOのカラム情報からテーブル名，カラム名を取得して、ディクショナリサーバ１０７にアクセスして抽出パラメタを得る関数である。このデータベースシステム１００のユーザは、sgmltext_t型をカラム型として指定するときに、カラムに関する情報と対応させて、抽出パラメタをディクショナリサーバ１０７に登録する。
【００４４】
問合せ解析部１１０は、前記レコード４０３，レコード４０８およびレコード４１０を参照することにより、外部関数p_sgml_extract()を実行サーバ１０６で実行させる、という解釈を行なう。これは、ＡＤＴ関数でＡＤＴ型データの操作を行なう場合は、データを格納している実行サーバ１０６で当該ＡＤＴ関数を実行することが並列処理機能を有効に利用できる、という考えに基づくものである。また、問合せ解析部１１０は、前記レコード４０９を参照することにより、外部関数p_sgml_load_sgmldef() を要求受付サーバ１０５で実行させる、という解釈を行なう。これは、外部関数p_sgml_load_sgmldef() がパラメタバインドを行なうための外部関数であるからである。
【００４５】
図５は、実行手順コード１１１の構成図である。この実行手順コード１１１は、次のＳＱＬ３による問合せ文に対応する処理の手順である。
SELECT extract(contents, 'abstract')
FROM   reports
WHERE  published_data > '1996-10-15'
すなわち、実行手順コード１１１は、インデクス検索して得られた一時的な結果の集合の要素について外部関数p_sgml_extract()を逐次実行するという、ユーザ問合せ１０４に見合った処理の実行手順を示している。
【００４６】
実行手順コード１１１は、ノード木構造で構成される。このようなノード木構造データは、後述する実行手順コード木構造データ作成処理６０１（図６）において作成される。ノード５０１は、当該ノードを説明する情報として「当該実行手順コードは、実行サーバで実行するコードである」ことを示す値を保持している。また、ノード５０１は、実行内容を示すノードへのポインタを保持している。そのポインタは、ノード５０２を指している。ノード５０２は、当該ノードを説明する情報として「左下位ノードを１回だけ実行し、その後は右下位ノードのみを実行する」ことを示す値を保持している。ノード５０２の左下位ノードはノード５０３であり、右下位ノードはノード５０６である。ノード５０３は、当該ノードを説明する情報として「一時的な処理結果リストを生成する」ことを示す値を保持している。ノード５０３の左下位ノードはノード５０４であり、右下位ノードはノード５０５である。ノード５０４は、ノード５０３における一時的な処理結果リストを識別するためのリストＩＤを保持する。ノード５０５は、当該ノードを説明する情報として「インデクスを利用した検索を行なう」ことを示す値を保持している。結局、上記ノード５０３，５０４および５０５は、「インデクスを利用した検索を行い、検索結果を結果リストＩＤで識別される一時結果リストとする」ことを示している。ここでは、テーブルreports のカラムpublished_dateに設定されたインデクスを用いて、published_date > '1996-10-15' の条件を満たすレコードの検索を行なうことが指示される。そして、検索の結果、条件を満たすレコードのレコードＩＤの集合が一時結果リストとして得られる。
【００４７】
ノード５０６は、当該ノードを説明する情報として「左下位ノードの処理結果を右下位ノードに渡す」ことを示す値を保持している。ノード５０６の左下位ノードはノード５０７であり、右下位ノードはノード５０８である。ノード５０７は、当該ノードを説明する情報として「（当該実行手順コードに従う処理での一時結果リストから）リスト要素を一件取り出す」ことを示す値を保持している。ここでは、リスト要素はレコードＩＤである。ノード５０８は、当該ノードを説明する情報として「（ノード５０６から渡されるリスト要素に対応する）レコード値をデータベースファイルから取り出す」ことを示す値を保持している。ここでは、レコードＩＤに対応するレコード値を取り出す。
【００４８】
前記ノード５０８の下位ノードであるノード５０９は、当該ノードを説明する情報として「（ノード５０８がデータベースファイルから取り出したレコード値の一部である）カラム値を取り出す」ことを示す値を保持している。ここでは、テーブルreports のレコード値のカラムcontentsに保持しているカラム値、すなわちＳＧＭＬテキストを取り出す。前記ノード５０９の下位ノードであるノード５１０は、当該ノードを説明する情報として「（ノード５０９で取り出したカラム値に対して）外部関数を実行する」ことを示す値を保持している。ここでは、カラムcontentsに保持しているＳＧＭＬテキストに対して外部関数p_sgml_extract()を実行する。なお、ノード５１０は、外部関数p_sgml_extract()の実行時の入力として実行用ワークエリア１
１３に保持する実行時入力情報１１２に保持する入力パラメタ値５１１へのポインタを保持している。ここでは、要求受付サーバ１０５のパラメタバインドによって設定した抽出パラメタを入力パラメタ値５１１としてポイントする。パラメタバインドとポインタの設定については、後で図８を参照して詳述する。
【００４９】
図６は、前記ステップ２０２の実行手順コード作成処理の流れ図である。この実行手順コード作成処理（２０２）の入力は問合せ解析部１１０が出力する実行手順コードパターン選定結果であり、出力および処理結果は実行手順コード１１１とパラメタバインド指示情報リストである。ステップ６０１では、実行手順コード作成部１１４は、実行手順コードパターン選定結果からノード木構造データを作成する。この実行手順コード木構造データ作成処理は、データベース処理の実行手順を示す一般的な制御情報と同等のものが作成できればよい。なお、ステップ６０１で作成されるノードには、外部関数コールを指示するノードも含まれる。ステップ６０２では、実行手順コード作成部１１４は、パラメタバインドの実行を指示するパラメタバインド指示情報リストを作成する。すなわち、外部関数コールを指示するノードを探索し、外部関数コールを指示するノードを見つけたら、そのパラメタを探索して、パラメタバインドが指定されていないか確認する。パラメタバインドが指定されていれば、その定義情報をもとにパラメタバインドを実行するための指示情報を作成する。例えば、図５のノード木構造データを探索して、外部関数p_sgml_extract()を呼び出すためのノード５１０を見つける。次に、図４の外部関数パラメータテーブル４０７から外部関数p_sgml_extract()をコールするときの第４パラメタの入力として外部関数p_sgml_load_sgmldef() を実行してパラメタバインドを行なわなければならない、という解釈を行なう。これらの情報をもとに、「ノード５１０の外部関数実行の第４パラメタ入力に外部関数p_sgml_load_sgmldef() を実行して得られる返却値を設定せよ」というパラメタバインド指示情報を作成できる。このようなパラメタバインド指示情報が実行手順コードに対して複数存在する場合は、リスト形式で管理し、パラメタバインド指示情報リストを作成する。
【００５０】
図７は、前記ステップ２０３の実行指示処理の流れ図である。この実行指示処理（２０３）の入力は前記実行手順コード作成部１１４が出力する実行手順コード１１１とパラメタバインド指示情報リストであり、出力および処理結果は実行結果保持部１１８に実行結果を保持させることである。ステップ７０１では、実行指示部１１５は、実行手順コード１１１とパラメタバインド指示情報リストをもとに、パラメタバインド制御部１１６を用いてパラメタバインドを実行する。パラメタバインド制御部１１６を用いたパラメタバインドの実行の詳細については、後で図８を参照して説明する。ステップ７０２では、実行指示部１１５は、パラメタバインドを行なった実行手順コード１１１をもとに、ユーザの要求に見合う処理が複数の実行サーバ１０６で並行に実行されるように、それぞれの実行サーバ１０６に処理実行を指示する。また、実行サーバ１０６へ処理を指示する時に、要求受付サーバ１０５の実行用ワークエリア１１３の情報をそのまま実行サーバ１０５の実行用ワークエリア１２０に送信する。
【００５１】
図８は、前記ステップ７０１のパラメタバインド処理の流れ図である。このパラメタバインド処理（７０１）の入力は実行手順コード作成部１１４で作成されたパラメタバインド指示情報リストであり、出力および処理結果はパラメタバインドを実行し入力パラメタへのポインタを実行手順コード１１１に設定することである。ステップ８０１では、パラメタバインド制御部１１６は、パラメタバインド指示情報リストの集合からパラメタバインド指示情報を１つ取り出す。ステップ８０２では、パラメタバインド制御部１１６は、取り出したパラメタバインド指示情報をもとにパラメタ値を返却する外部関数を実行する。ここでは、外部関数p_sgml_load_sgmldef() を実行し、ディクショナリサーバ１０７から抽出パラメタを取得する。このステップ８０２が、「要求受付サーバ上で入力情報取得用の組込みモジュールを実行して入力情報を取得する取得過程」に相当する。ステップ８０３では、パラメタバインド制御部１１６は、返却されたパラメタ値を実行用ワークエリア１１３に実行時入力情報１１２としてコピーし、パラメタバインド指示情報の指示に従って、この実行時入力情報１１２をパラメタ値としてポイントするように実行手順コード１１１に情報を設定する。このステップ８０３が、「入力情報を渡す指示を含ませるように実行手順コードを編集する設定過程」に相当する。ステップ８０４では、パラメタバインド制御部１１６は、パラメタバインド指示情報リストに次のパラメタバインド指示情報が存在するかチェックする。次のパラメタバインド指示情報が存在する場合は前記ステップ８０１に戻り、次のパラメタバインド指示情報が存在しない場合は処理を終了する。
【００５２】
以上の処理とデータ構造とにより、要求受付サーバ１０５で組込みモジュールに含まれる外部関数をコールしてパラメタバインドを行ない、そのパラメタ値を入力として実行サーバ１０６で組込みモジュールに含まれる外部関数をコールすることが可能となる。
【００５３】
次に、組込みモジュール定義情報１３０をディクショナリサーバ１０７に登録する処理について説明する。図９は、組込みモジュール定義登録ツール１３２が組込みモジュール定義情報１３０を登録する処理の流れ図である。この組込みモジュール定義登録処理の入力は組込みモジュール仕様記述１３１であり、出力および処理結果はディクショナリサーバ１０７に組込みモジュール定義情報１３０を保持させることである。ステップ９０１では、組込みモジュール定義登録ツール１３２は、組込みモジュール仕様記述１３１を解析する。データベース管理システム１０２が提供する組込みモジュールインタフェイス定義言語によって記述された組込みモジュール仕様記述１３１の例を次に示す。この例は、図４に示した組込みモジュール定義情報１３０に対応するモジュール仕様記述である。
p_sgml_extract (
in      sgmltext_t,
in      VARCHAR,
returns BLOB,
in      BLOB setter('p_sgml_load_sgmldef')
) as ADT_FUNCTION;
p_sgml_load_sgmldef (
returns BLOB,
in      DBCOLUMNINFO
) as BIND_PARAMETER;
上記の記述例では、外部関数p_sgml_extract()と外部関数p_sgml_load_sgmldef() とをデータベース管理システム１０２から呼び出すためのインタフェイス仕様が示されている。
【００５４】
実行サーバ１０６で実行される外部関数p_sgml_extract()のインタフェイス仕様において、キーワードreturns は、パラメタの修飾子であり、当該パラメタが返却用に用いられることを示す。また、キーワードsetterに続いて外部関数名を指定することにより、当該パラメタがパラメタバインドの対象であることを示し
、ここに指定された外部関数によってパラメタ値を取得することを示す。また、キーワードasに続いて関数修飾子 ADT_FUNCTION を指定することにより、当該関数がＡＤＴ関数に対応付けられた外部関数であることを示す。キーワードreturns から as ADT_FUNCTION; までの記述が、「ユーザによる組込みモジュールの機
能呼び出しで渡される入力情報以外の付加的な入力情報を当該組込みモジュールの実行のために渡す指示」に相当する。また、キーワードsetterに続いて外部関数名を指定することが、「実行サーバ上で組込みモジュールを実行する際に必要な入力情報を要求受付サーバが入力情報取得用の組込みモジュールを実行して取得すべきことを示す指示」に相当する。なお、ユーザからの要求に用いられるＡＤＴ関数extract() のインタフェイス仕様では、ＡＤＴ型sgmltext_tとパラメタ型VARCHAR の２つの入力をとるように定義されているのに対して、この２つの入力以外にパラメタ型BLOBの入力を２つとるように外部関数p_sgml_extract()が定義されている。
【００５５】
次に、要求受付サーバ１０５で実行される外部関数p_sgml_load_sgmldef() のインタフェイス仕様において、キーワードreturns は、パラメタの修飾子であり、当該パラメタが返却用に用いられることを示す。また、キーワードasに続いて関数修飾子BIND_PARAMETERを指定することにより、当該関数がパラメタバインドに用いられる外部関数であることを示す。キーワードreturns から DBCOLUMNINFO までの記述が、「ユーザによる組込みモジュールの機能呼び出しで渡される入力情報以外の付加的な入力情報を当該組込みモジュールの実行のために渡す指示」に相当する。また、キーワードasに続いて関数修飾子BIND_PARAMETERを指定することが、「実行サーバ上で組込みモジュールを実行する際に必要な入力情報を要求受付サーバが入力情報取得用の組込みモジュールを実行して取得すべきことを示す指示」に相当する。
【００５６】
ステップ９０２では、組込みモジュール定義登録ツール１３２は、解析結果を組込みモジュール定義情報１３０としてディクショナリサーバ１０７の定義情報管理部１２７を用いて登録する。そして、処理を終了する。
【図面の簡単な説明】
【００５７】
【図１】本発明の一実施形態にかかるデータベースシステムの構成図である。
【図２】図１のデータベースシステムにおける問合せ処理の流れ図である。
【図３】図２の問合せ処理における問合せ解析処理の流れ図である。
【図４】図１のデータベースシステムにおけるユーザ定義関数情報と組込みモジュール定義情報の構成図である。
【図５】図１のデータベースシステムにおける実行手順コードの構成図である。
【図６】図２の問合せ処理における実行手順コード作成処理の流れ図である。
【図７】図２の問合せ処理における実行指示処理の流れ図である。
【図８】図７の実行指示処理におけるパラメタバインド処理の流れ図である。
【図９】図１のデータベースシステムにおける組込みモジュール定義登録処理の流れ図である。
【図１０】従来のデータベースシステムの一例の構成図である。
【符号の説明】
【００５８】
１００：データベースシステム
１０２：データベース管理システム
１０５：要求受付サーバ
１０６：実行サーバ
１１７：組込みモジュール
１２５：組込みモジュール
１１１：実行手順コード
１１２：実行時入力情報
１２４：実行時入力情報
１３１：組込みモジュール仕様記述
【図１】
2005135429.tif 000003
【図２】
2005135429.tif 000004
【図３】
2005135429.tif 000005
【図４】
2005135429.tif 000006
【図５】
2005135429.tif 000007
【図６】
2005135429.tif 000008
【図７】
2005135429.tif 000009
【図８】
2005135429.tif 000010
【図９】
2005135429.tif 000011
【図１０】
2005135429.tif 000012