【问题标题】:ORA-29902: error in executing ODCIIndexStart() routine ORA-20000: Oracle Text error: DRG-50901: text query parser syntax error on line 1, column 19ORA-29902:执行 ODCIIndexStart() 例程时出错 ORA-20000:Oracle 文本错误:DRG-50901:第 1 行第 19 列的文本查询解析器语法错误
【发布时间】:2014-11-05 12:36:52
【问题描述】:
SELECT person_no sub_sys_individual_id,
 nm_e,
 nm_a,
 nvl(sex, -1) sex,
nvl(prs_nat, -999) prs_nat,
person_no,
'NA' prog_where_not_allowed,
'NA' udb_no,
 person_tp,
 pass_no
FROM ban_inq_tab
WHERE contains (nm_e ,'xxstart JUHETI BT MEMED ASMANI%') >0
AND (trans_flag IS NULL OR trans_flag = 'C');

请帮助我解决这个问题并遇到解析器语法错误

【问题讨论】:

  • 没有这个查询是否有效:WHERE contains (nm_e ,'xxstart JUHETI BT MEMED ASMANI%') >0
  • 是的查询在没有包含的情况下工作正常。帮我处理这个保留字BT
  • 它看起来像 OracleText 索引错误

标签: oracle text


【解决方案1】:

您必须转义 BT 特殊词(但您可以转义整个字符串)。

SELECT person_no sub_sys_individual_id,
 nm_e,
 nm_a,
 nvl(sex, -1) sex,
nvl(prs_nat, -999) prs_nat,
person_no,
'NA' prog_where_not_allowed,
'NA' udb_no,
 person_tp,
 pass_no
FROM ban_inq_tab
WHERE contains (nm_e ,'{xxstart JUHETI BT MEMED ASMANI}%') >0
AND (trans_flag IS NULL OR trans_flag = 'C');

【讨论】:

  • 如果我们添加 { } 意味着它没有返回结果。如果我在开始或结束时使用 BT,我不会遇到问题。它的抛出错误只有我们在中间词中使用 BT。有什么办法可以在停用词或停用词中使用 BT 来防止这种情况发生。
  • 可能尝试连接它? WHERE contains (nm_e ,'xxstart JUHETI ' || '/BT' || ' MEMED ASMANI%') >0
  • 如果单词是 BT、SYN 等需要使用 /BT、/SYN 转义它们,我会遇到这样的情况。如何使用 regexp_replace SELECT REGEXP_REPLACE('JUHETI BT MEMA', 'BT', '\BT',2) FROM dual;如何在这个 regexp_replace 函数中使用单词列表
【解决方案2】:

仅供参考,如果您有存储过程的输入参数,您也会收到此错误(我在 Oracle 12.2 上),该存储过程将作为 NVARCHAR2 包含谓词中的查询。 因此,如果您将存储过程的输入参数作为 NVARCHAR2 并且该参数用于包含谓词中的查询,则将其更改为 VARCHAR(或者可能是 CLOB),它将不再引发此错误。

【讨论】:

    【解决方案3】:

    错误导致BT,这是一个保留字。该解决方案在Oracle Community forum 中进行了描述。

    【讨论】:

    • 感谢 Mike,在那篇文章中,他们提到放置花括号 {} 可以解决问题。但现在对我来说,在放置 {} 后查询没有返回任何行。
    • 帮我处理这个保留字BT
    • 尝试用转义字符/替换保留字BT(Broader Term)。您的搜索字符串类似于
      where contains (oratext ,'xxstart JUHETI /BT MEMED ASMANI%') >0 。您还可以在<a href="/default/index/tourl?u=aHR0cDovL2RvY3Mub3JhY2xlLmNvbS9jZC9FMTE4ODJfMDEvdGV4dC4xMTIvZTI0NDM2L2Nxb3Blci5odG0jQ0NSRUYwMzAw" rel="nofollow" target="_blank">oracle text contains query operator</a>
      上阅读有关 Oracle 文档的更多信息
    猜你喜欢
    • 2017-11-02
    • 2021-02-06
    • 1970-01-01
    • 2019-12-19
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多