【问题标题】:Apex report full text search unable to apply scoringApex 报告全文搜索无法应用评分
【发布时间】:2017-12-01 14:04:34
【问题描述】:

我遇到了一些麻烦,在线搜索时找不到直接的答案。 我正在使用 oracle apex 5.1.3,我为带有全文搜索的报告编写了一些 plsql,但似乎无法对其应用分数,我知道我犯了一个金发错误,但我知道基本查询有效。

这是我原来的查询

SELECT VENUE_NAME, CITY, POSTCODE, score(1) + score(2) as score
FROM GAMEVENUE
WHERE
(
CONTAINS(VENUE_NAME, '$FUZZY(plymouth)', 1) > 0 
OR CONTAINS(CITY, '$FUZZY(plymouth)', 2) > 0 
OR CONTAINS(POSTCODE, 'plymouth') > 0
)
ORDER BY score DESC;

这就是问题所在,任何帮助都会很棒。

解析返回的查询结果为“ORA-06550:第 9 行,第 11 列:ORA-29908:缺少辅助运算符的主要调用”。如果您认为您的查询在语法上是正确的,请选中下面的“使用通用列名”复选框以继续而不进行解析。

DECLARE

  l_query VARCHAR2 (4096);

BEGIN

  l_query := '
                select 
                "VENUE_ID",
                "VENUE_NAME",
                "CITY",
                "VENUE_NO",
                "POSTCODE",
                dbms_lob.getlength("THUMBNAIL") "THUMBNAIL",
                score(1) + score(2) as score
                 FROM   "GAMEVENUE" i';

  IF v('P2_REPORT_SEARCH') IS NOT NULL THEN
    l_query := l_query||' '||'
    where 
    (   
 contains(VENUE_NAME, ''$fuzzy('|| v('P2_REPORT_SEARCH') ||'), 1'') > 0 or
 contains(CITY, ''$fuzzy('|| v('P2_REPORT_SEARCH') ||'), 2'') > 0 or
 contains(POSTCODE, '''|| v('P2_REPORT_SEARCH') ||''') > 0 
    )
   ORDER BY score DESC';
  END IF;

  RETURN l_query;

END;

【问题讨论】:

    标签: sql plsql full-text-search oracle-apex


    【解决方案1】:
    ORA-29908: missing primary invocation for ancillary operator
    

    表示您实际上正在运行这样的查询:

    select 
                "VENUE_ID",
                "VENUE_NAME",
                "CITY",
                "VENUE_NO",
                "POSTCODE",
                dbms_lob.getlength("THUMBNAIL") "THUMBNAIL",
                score(1) + score(2) as score
                 FROM   "GAMEVENUE" i
    

    换句话说,您错过了WHERE 子句,可能是因为这个 IF 语句:

    IF v('P2_REPORT_SEARCH') IS NOT NULL THEN
      l_query := l_query||' '||'
      where ...
    

    如果没有添加 where 子句,您可能想要做的是避免调用 score(),例如

    if v('P2_REPORT_SEARCH') is not null then
       l_selectscore := 'score(1) + score(2)';
    else
       l_selectscore := 'null';
    end if;
    
    l_query := '
                select 
                "VENUE_ID",
                "VENUE_NAME",
                "CITY",
                "VENUE_NO",
                "POSTCODE",
                dbms_lob.getlength("THUMBNAIL") "THUMBNAIL",
                ' || l_select_score || ' as score
                 FROM   "GAMEVENUE" i';
    

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多