25.3. Подготовка данных

Для работы с текстом пользователю необходима роль CTXAPP.

Что такое роль?

Роль (ROLE)— именованная совокупность привилегий, которые могут быть предоставлены пользователям или другим ролям. Oracle поддерживает несколько предопределенных ролей. Для систем, в которых количество пользователей и приложений велико, роли могут заметно облегчить разграничение доступа, например, возможно динамически назначать роли для изменения набора привилегий пользователя при работе с различными приложениями. Без нее пользователь не сможет обращаться к необходимым объектам схемы CTXSYS.

13. Просмотрите назначенные вам роли: SQL> select ROLE from SESSION_ROLES;

Результат такой:

ROLE

---------

CONNECT

RESOURCE

CTXAPP

14. Создайтетаблицу: SQL>CREATE TABLE docs (doc_id NUMBER (10), vc2doc VARCHAR2 (4000));

В среде ORACLE имеются следующие типы данных:

CHAR(n), VARCHAR2(n) — строки переменной длины.

INTEGER — масштабируемое целое.

NUMBER(n) — масштабируемое целое с плавающей точкой.

DATE — дата/время

ROWID, ROW — идентификаторы записей в БД.

BLOB — большие двоичные объекты.

CLOB — большие строковые объекты.

BFILE — указатели на большие внешние объекты.

15. Введите данные:

SQL> INSERT INTO docs VALUES ( 1, 'Маша имеет маленькую лампу' );

SQL> INSERT INTO docs VALUES ( 2, 'Лучик, лучик маленькая звезда' );

SQL >INSERT INTO docs VALUES ( 3, 'Эту лампу нельзя брать' );

16. Проcмотрите, чтоввели: SQL>select * from docs;

17. Создайтеиндекс: SQL>CREATE INDEX docs_vc2doc_idx ON docs (vc2doc) INDEXTYPE IS ctxsys.context;

Обратите внимание: индекс DOCS_VC2DOC_IDX — не простой, а «прикладной» (domain); точнее — предопределенного типа CTXSYS.CONTEXT, то есть «текстовый». В общем случае создание такого индекса содержит указание ряда специальных параметров, но для первого знакомства довольно положиться на умолчательные характеристики.

Основой для запросов к документам по индексу типа CTXSYS.CONTEXT является «оператор» CONTAINS. По своему употреблению оператор Oracle SQL практически не отличается от функции. Оператор CONTAINS возвращает меру, иначе степень, соответствия документа текстовому запросу («relevance»).

18. Создайтескрипт:

SQL>SELECT CONTAINS ( vc2doc, '&1' ) AS score, vc2doc FROM docs

SQL>.

SQL>SAVE simpleq REPLACE

19. Файл simpleq.sql должен находиться в Oracle каталоге bin