Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


2.12.1 SGMLTEXT型の場合

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

関数名

説明

SGMLTEXT

SGML文書登録

contains

構造指定検索

contains_with_score,score

スコア検索

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

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

〈この項の構成〉

(1) 検索

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

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

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

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

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

[図データ]

(b) SGMLTEXT型の場合の検索例(その2)

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

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

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

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

[図データ]

(2) 更新

SGMLTEXT型の場合の更新例として,薬品2の取扱い説明書を更新する例を次の図に示します。更新をする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を削除する例を次の図に示します。行を削除するSQL文は,次のように記述できます。

  DELETE FROM 薬品管理表
    WHERE 薬品ID = '薬品2'
[説明]

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

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

[図データ]

(4) 挿入

SGMLTEXT型の場合の挿入例として,薬品25の行を挿入する例を次の図に示します。行を挿入する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型の場合の挿入例

    [図データ]