Parametry:
ft_label | označení fulltextového systému ve tvaru schéma.fulltext nebo .fulltext pro otevřenou aplikaci; |
docid | číslo dokumentu (unikátní hodnota v rámci fulltextového systému); |
filename | plné jméno souboru obsahujícího dokument (pouze na klientské straně); |
format | formát dokumentu (popis niže); |
doc | dokument nebo odkaz na dokument podle hodnoty paramametru mode; |
mode | způsob předání dokumentu |
Od verze:
7.0
Popis:
Funkce uloží dokument specifikovaný parametry do fulltextového systému označeného parametrem ft_label. Od 602SQL verze 9.5 existuje jednodušší způsob deklarování fulltextových triggerů, nicméně tento obecný postup má stále význam ve složitějších případech.
Je-li funkce volána na straně serveru (SQL syntax), pak lze dokument předat dvojím způsobem, přičemž způsob předání popisuje parametr mode takto:
hodnota | popis |
0 | dokument je obsahem parametru doc (tj. v parametru doc je obsah sloupce (nebo výraz) typu CHAR nebo CLOB, resp. BLOB, je-li obsahem binární soubor); |
1 | dokument je v souboru, jehož jméno je v parametru doc (tj. v parametru doc je obsah sloupce typu CHAR, který obsahuje jen plná jména souborů; soubory se musí nacházet lokálně na počítači, kde běží server při volání funkce z SQL nebo kde běží klient při volání z klientské strany); |
Pomocí format lze zvolit, má-li se indexovat čistý text (parametr TXT
, TEXT
nebo PLAIN
) nebo jiný formát (RTF
, DOC
, HTM
, XML
, XLS
, PDF
, PPT
a OOO
(OpenOffice.org formáty verze 1 i 2)) - v tomto případě se provádí dodatečná analýza textu, je-li skutečně daný formát a jaké verze (u DOC). Nepodaří-li se analýza, funkce skončí s chybou CONVERSION_NOT_SUPPORTED (sqlstate W0226). Je-li parametr format prázdný řetězec, provede se analýza textu a vybere se známý formát (nebo nastane chyba, když se formát nerozpozná). Toto je obvyklý způsob indexování různých dokumentů (např. souborů). Je-li parametr format ZIP
, text se nejprve rozzipuje, najde se vhodný konvertor a provede se indexace.
Pokud je způsob uložení dokumentu 1 (jméno souboru) a soubor se nenajde, skončí funkce chybou CONVERSION_NOT_SUPPORTED (sqlstate W0226).
Je-li funkce volána na klientské straně (C nebo Pascal syntax), pak dokument musí být uložen v souboru, jehož plné jméno je předáno jako parametr filename.
Pokud fulltextový systém již obsahuje informace o obsahu dokumentu označeného parametrem docid, jsou před zaindexováním předaného dokumentu vymazány. Pokud indexujete více tabulek, věnujte pozornost unikátnosti čísla dokumentu pro všechny tabulky (např. využitím jedné sekvence)!
Hodnota funkce:
Funkce vrací TRUE při úspěchu, FALSE při chybě.
Příklad:
Předpokládejme, že tabulka TXTAB obsahuje text ve sloupci TX a číslo tohoto dokumentu ve sloupci CISLO_DOC. Text je buď prostý text nebo je ve formátu RTF. Zaindexování lze pak provádět v triggeru definovaném takto:
TRIGGER txupd AFTER UPDATE ON Txtab
REFERENCING NEW AS nove FOR EACH ROW
BEGIN
IF Substring(nove.tx FROM 1 FOR 5) = '{\rtf' THEN
CALL Fulltext_index_doc('.FT_FORUM', nove.cislo_doc, nove.tx, 'rtf', 0);
ELSE
CALL Fulltext_index_doc('.FT_FORUM', nove.cislo_doc, nove.tx, 'txt', 0);
END IF;
END
Tento trigger předpokládá, že se číslo dokumentu při operaci UPDATE nemění.
Příklad:
Předpokládejme, že tabulka MojeCD má mj. primární klíč Id_CD, dále sloupce Nazev a Interpret typu CHAR(250) a Poznamka typu CLOB. Všechny tyto údaje je třeba zaindexovat (při vkládání nového CD a při editaci).
TRIGGER PoVlozeniCD AFTER INSERT ON MojeCD
REFERENCING NEW AS nove FOR EACH ROW
BEGIN
CALL Fulltext_index_doc('.cd_ft', nove.id_CD, nove.nazev||' '||nove.interpret||' '||nove.poznamka, 'txt', 0);
END
TRIGGER PoEditaciCD AFTER UPDATE OF ANY nazev,interpret,skladby,poznamka ON MojeCD
REFERENCING NEW AS nove FOR EACH ROW
BEGIN
CALL Fulltext_index_doc('.cd_ft', nove.id_CD, nove.nazev||' '||nove.interpret||' '||nove.poznamka, 'txt', 0);
END
TRIGGER PredVymazanim BEFORE DELETE ON MojeCD
REFERENCING OLD AS stare FOR EACH ROW
BEGIN
CALL Fulltext_remove_doc(".cd_ft", stare.id_CD);
END
Viz