Mit der Funktion für gespeicherte Prozeduren bzw. der Tabellenwertfunktion können Sie Textindizes für Sichten erstellen. Allerdings dürfen Sie keine Skalarfunktionen, z. B. CONTAINS, einfügen.
Ein weiterer gravierender Nachteil besteht darin, dass für Sichten keine Auslöser erstellt werden können. Somit werden in den zu Grunde liegenden Basistabellen keine Änderungen erkannt.
Bei Indexteilaktualisierungen muss der Benutzer dementsprechend wissen, welches Dokument hinzugefügt, aktualisiert oder gelöscht wurde, um den Textindex mit der Datenbank zu synchronisieren. Zu diesem Zweck müssen alle Änderungen der Protokolltabelle hinzugefügt werden. Dieser Prozess wird im folgenden Beispiel illustriert:
db2 "create table sample (key INTEGER not null PRIMARY KEY, name VARCHAR(50) not null, comment VARCHAR(90))"
db2 "insert into sample values(1,'Claus','works in room 301')" db2 "insert into sample values(2,'Manja','is in the same office as Juergen')" db2 "insert into sample values(2,'Juergen','has the longest way to Raiko')" db2 "insert into sample values(3,'Raiko','is sitting in the office besides Claus ')"
db2 "create view sampleview as select key, comment from sample"
db2text "create index indexview for text on hde.sampleview(comment) cache table (comment) maximum cache size 1 key columns for index on view (key)" db2text "update index indexview for text" db2text "activate cache for index indexview for text"
Sie müssen die Cachetabelle angeben, um einen Textindex für eine Sicht erstellen zu können. Zur Erstellung der korrekten Protokolltabelle müssen Sie die Schlüsselspalten für den Index oder die Sicht angeben. Wenn Sie auf diese Weise einen Index erstellen, können Sie den Index auch mit der Tabellenwertfunktion verwenden.
Wenn Sie die Suche über eine gespeicherte Prozedur verwenden, müssen Sie in einer verteilten DB2-Umgebung für Verwaltungstabellen auf einem einzelnen Knoten explizit einen Tabellenbereich angeben und diesen Knoten explizit aufrufen. Um sicherzustellen, dass Sie zum richtigen Knoten eine Verbindung herstellen, verwenden Sie die Umgebungsvariable DB2NODE.
db2 "insert into sample values(4,'Bernhard','is working in the same floor as Manja, but not as Claus')" db2 "insert into sample values(5,'Guenter','shares the office with Raiko')"
db2 "select INDSCHEMA,INDNAME,LOGVIEWSCHEMA,LOGVIEWNAME from db2ext.textindexes"Das Layout der Protokolltabelle sieht folgendermaßen aus:
sqltype sqllen sqlname.data sqlname.length -------------------- ------ ----------------------- -------------- 496 INTEGER 4 OPERATION 9 392 TIMESTAMP 26 TIME 4 497 INTEGER 4 PK01 4Verwenden Sie folgende Befehle, um der Protokolltabelle die Einträge hinzuzufügen:
db2 "insert into sample values(0,CURRENT TIMESTAMP,4)" db2 "insert into sample values(0,CURRENT TIMESTAMP,5)"Der erste Wert beschreibt die Operation (0 = Einfügen, 1 = Aktualisieren, 2 = Löschen). Der zweite sollte immer CURRENT TIMESTAMP lauten und der letzte Wert sollte den Schlüssel angeben, der eingefügt wurde.
db2text "update index indexview for text"
Sie können nun mit Hilfe der gespeicherten Prozedur nach den neuen Werten suchen.