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. [説明]
-
BLOB型の埋込み変数「sgml」を定義します。
-
埋込み変数「sgml」に,更新する新しいデータを格納します。
-
作成した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. [説明]
-
BLOB型の埋込み変数「sgml」を定義します。
-
埋込み変数「sgml」に,挿入するデータを格納します。
-
作成したBLOBデータの属性値sgml_lengthを,格納したデータの長さにセットします。
図2‒51 SGMLTEXT型の場合の挿入例
-