Oracle Text. Попробуйте обновить столбец с помощью контекстного индекса

#oracle #oracle-text

#Oracle #oracle-text

Вопрос:

Я пытаюсь обновить столбец с помощью контекстного индекса.

 CREATE TABLE new_table(first_column NUMBER, text CLOB);
INSERT INTO new_table VALUES(1,'Oracle');
INSERT INTO new_table VALUES(2,'Text');
COMMIT;
CREATE INDEX idx_new_table_text ON new_table(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC ( ON COMMIT)');
  

С помощью параметра «PARAMETERS (‘СИНХРОНИЗАЦИЯ (ПРИ ФИКСАЦИИ)’)» я смог добавить данные в таблицу.
Но я все еще не могу обновить данные в этом столбце или удалить строки из этой таблицы.

 UPDATE new_table SET text = 'new text' WHERE first_column = 3;
COMMIT;
  

И после совершения, я вижу ошибки:
«Ошибка фиксации» И
«ORA-00604: произошла ошибка при рекурсивном SQL уровня 1
ORA-06550: Строка 1, столбец 7:
PLS-00306: неправильный номер или типы документов при вызове «SYNCRN»»
Скажите мне, пожалуйста, что я должен сделать, чтобы UPDATE и DELETE начали работать?

Комментарии:

1. Какую версию Oracle вы используете? Это случайно не версия 11.2.0.4? Если это так, это может быть связано с ошибкой 17501296 — Зафиксировать процедуру обратного вызова ctxsys.syncrn не синхронизирован с C-кодом 11.2.0.4

2. Ваш код работает для меня в версии 12.2.

3. Да, я использую именно эту версию — «Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 — 64-разрядная версия».

4. И если я не могу использовать более высокую версию, могу ли я как-то избежать этой ошибки?

5. Я попытался вызвать следующий код: begin ctx_ddl.sync_index(‘idx_new_table_text’); end; И получил это сообщение об ошибке: «Отчет об ошибке — ORA-06550: строка 2, столбец 1: PLS-00904: недостаточные привилегии для доступа к объекту CTXSYS.CTX_DDL ORA-06550: строка 2, столбец 1: PL / SQL: оператор 06550 проигнорирован. 00000 — «строка %s, столбец %s:n%s » * Причина: Обычно ошибка компиляции PL / SQL. *Действие:» И после обращения к моему администратору базы данных я обнаружил, что этот модуль не установлен. Я думаю, что это именно причина ошибки. Я прав?