ORA-29908: отсутствует первичный вызов для вспомогательного оператора - PullRequest
2 голосов
/ 02 декабря 2011

У меня ошибка, которую я не могу понять.У кого-нибудь есть идея, что я здесь делаю не так?Пожалуйста, предположите, что изображения имеют место, предмет, описание, и тестирование появляется несколько раз в предмете или месте или описании.Кроме того, я установил для параметра инициализации ConText TEXT_ENABLE значение true.

SELECT 4*SCORE(1) + 2*SCORE(2) + SCORE(3) AS RANK
FROM   images i
WHERE  CONTAINS(i.subject, 'testing', 1)>0
OR  CONTAINS(i.place, 'testing', 2)>0
OR  CONTAINS(i.description, 'testing', 3)>0
ORDER BY RANK;

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Мне удалось решить проблему, окружив текущий запрос другим запросом и перетянув ORDER BY RANK во внешний запрос. Вот так:

SELECT * 
FROM (SELECT 4*SCORE(1) + 2*SCORE(2) + SCORE(3) AS RANK
      FROM   images i
      WHERE  CONTAINS(i.subject, 'testing', 1)>0
      OR  CONTAINS(i.place, 'testing', 2)>0
      OR  CONTAINS(i.description, 'testing', 3)>0)
ORDER BY RANK;
1 голос
/ 02 декабря 2011

Я не могу воспроизвести на 10.2.0.4.Какая у вас версия БД?

тестовый скрипт:

CREATE TABLE text_data (
   txt1 VARCHAR2(4000), 
   txt2 VARCHAR2(4000), 
   txt3 VARCHAR2(4000)
);
INSERT INTO text_data 
   (SELECT text, text, text FROM all_source WHERE ROWNUM <= 1e4);

CREATE INDEX txt1 ON text_data (txt1) INDEXTYPE IS ctxsys.context;
CREATE INDEX txt2 ON text_data (txt2) INDEXTYPE IS ctxsys.context;
CREATE INDEX txt3 ON text_data (txt3) INDEXTYPE IS ctxsys.context;

SELECT 4 * SCORE(1) + 2 * SCORE(2) + SCORE(3) AS RANK
  FROM text_data i
 WHERE CONTAINS(i.txt1, 'FUNCTION', 1) > 0
    OR CONTAINS(i.txt2, 'FUNCTION', 2) > 0
    OR CONTAINS(i.txt3, 'FUNCTION', 3) > 0
 ORDER BY RANK;
...