スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

2.12.1 SGMLTEXT型の場合

ここでは,全文検索プラグイン(HiRDB Text Search Plug-in)を使用した例について説明します。HiRDB Text Search Plug-inが提供する抽象データ型関数を次に示します。なお,プラグインが提供する抽象データ型関数については,各プラグインマニュアルを参照してください。

関数名 説明
SGMLTEXT SGML文書登録
contains 構造指定検索
contains_with_score,score スコア検索

この項では,薬品の取扱い説明書をSGML文書で管理する例について説明します。

例題で使用している表は,マニュアル「HiRDB Version 8 システム導入・設計ガイド」のデータベースの作成(プラグインが提供する抽象データ型を含む表の場合)で定義している表を利用しています。

<この項の構成>
(1) 検索
(2) 更新
(3) 削除
(4) 挿入

(1) 検索

(a) SGMLTEXT型の場合の検索例(その1)

SGMLTEXT型の場合の検索例として,頭痛に効く薬品を調べる例を図2-47に示します。検索をするSQL文は,次のように記述できます。

 
  SELECT 薬品ID FROM 薬品管理表
    WHERE contains(取扱い説明書,'添付文書データ[効能{"頭痛"}]')
      IS TRUE
 

[説明]
この例では,抽象データ型関数containsを使用して,列「取扱い説明書」の効能という構造部分に"頭痛"の文字列を含んでいる薬品を検索しています。

図2-47 SGMLTEXT型の場合の検索例(その1)

[図データ]
(b) SGMLTEXT型の場合の検索例(その2)

SGMLTEXT型の場合の検索例として,食あたりに効く薬品の薬品IDと在庫量を求める例を図2-48に示します。検索をするSQL文は,次のように記述できます。

 
  SELECT 薬品管理表.薬品ID,在庫量
    FROM 薬品管理表 LEFT OUTER JOIN 在庫表
      ON 薬品管理表.薬品ID=在庫表.薬品ID
      WHERE contains(取扱い説明書,'添付文書データ[効能{"食あたり"}]')
          IS TRUE
 

[説明]
この例では,薬品管理表と在庫表を外結合して検索しています。抽象データ型関数containsを使用して,列「取扱い説明書」の効能という構造部分に"食あたり"の文字列を含んでいる薬品IDを検索して,その薬品IDの在庫量を求めています。

図2-48 SGMLTEXT型の場合の検索例(その2)

[図データ]

(2) 更新

SGMLTEXT型の場合の更新例として,薬品2の取扱い説明書を更新する例を図2-49に示します。更新をするSQL文は,次のように記述できます。

 
  UPDATE 薬品管理表 SET 取扱い説明書 = SGMLTEXT(:sgml AS BLOB(1M))
    WHERE 薬品ID = '薬品2'
 

[説明]
この例では,抽象データ型関数SGMLTEXTを使用して,薬品2の取扱い説明書のデータを更新しています。
なお,UPDATE文の前に,あらかじめ次のBLOB型の埋込み変数「sgml」を定義しているものとします。
 
EXEC SQL BEGIN DECLARE SECTION;     1.
   SQL TYPE IS BLOB(300K) sgml;     1.
EXEC SQL END DECLARE SECTION;       1.
strcpy(sgml.sgml_data,char_ptr_pointing_to_a_sgml_text);         2.
sgml.sgml_length = strlen(char_ptr_pointing_to_a_sgml_text);     3.
 
[説明]
  1. BLOB型の埋込み変数「sgml」を定義します。
  2. 埋込み変数「sgml」に,更新する新しいデータを格納します。
  3. 作成したBLOBデータの属性値sgml_lengthを,格納したデータの長さにセットします。

    図2-49 SGMLTEXT型の場合の更新例

    [図データ]

(3) 削除

SGMLTEXT型の場合の削除例として,薬品2を削除する例を図2-50に示します。行を削除するSQL文は,次のように記述できます。

 
  DELETE FROM 薬品管理表
    WHERE 薬品ID = '薬品2'
 

[説明]
この例では,薬品管理表から薬品2の行を削除しています。

図2-50 SGMLTEXT型の場合の削除例

[図データ]

(4) 挿入

SGMLTEXT型の場合の挿入例として,薬品25の行を挿入する例を図2-51に示します。行を挿入するSQL文は,次のように記述できます。

 
  INSERT INTO 薬品管理表(薬品ID,取扱い説明書)
    VALUES(薬品25,SGMLTEXT(:sgml AS BLOB(1M)))
 

[説明]
この例では,抽象データ型関数SGMLTEXTを使用して,薬品管理表に薬品25の行を追加しています。
なお,INSERT文の前に,あらかじめ次のBLOB型の埋込み変数「sgml」を定義しているものとします。
 
EXEC SQL BEGIN DECLARE SECTION;     1.
   SQL TYPE IS BLOB(300K) sgml;     1.
EXEC SQL END DECLARE SECTION;       1
strcpy(sgml.sgml_data,char_ptr_pointing_to_a_sgml_text);         2.
sgml.sgml_length = strlen(char_ptr_pointing_to_a_sgml_text);     3.
 
[説明]
  1. BLOB型の埋込み変数「sgml」を定義します。
  2. 埋込み変数「sgml」に,挿入するデータを格納します。
  3. 作成したBLOBデータの属性値sgml_lengthを,格納したデータの長さにセットします。

    図2-51 SGMLTEXT型の場合の挿入例

    [図データ]