使用XMLQuery时,Oracle Query中的错误与匹配中的以下字符(。: - )%\ - )

时间:2018-02-03 01:15:21

标签: oracle

我在oracle中使用XMLQuery进行了以下查询,并在其中匹配函数。

当我尝试执行此查询时,会出现以下错误:

ORA-19114: XPST0003 - error during parsing the XQuery expression: 
ORA-19202: Error occurred in XML processing
LPX-00806: Invalid token in the pattern
19114. 00000 -  "error during parsing the XQuery expression: %s"
*Cause:    An error occurred during the parsing of the XQuery expression.
*Action:   Check the detailed error message for the possible causes.

可以通过匹配功能帮助修复此问题。

查询:

选择 XMLQuery('// node()[ancestor :: emp_content或ancestor :: stimulus_reference] [not(ancestor :: rationale)] [self :: text()] [not(ancestor :: inline_code)而不是(ancestor ::) code_line)] [匹配(。,“[0-9] + [^ 0-9,。: - )% - snrt]”)]'传递emp_cntnt_xml返回内容)作为数据 来自emp,其中emp_num在(12345)

示例XML:

<?xml version="1.0" encoding="UTF-8"?>
<emp>
  <emp_content>
    <task>
      <emp_response>
        <response_choices>
          <choice_list>
            <choice numeric_identifier="1">10°</choice>
            <choice numeric_identifier="2">20°</choice>
            <choice numeric_identifier="3">36°</choice>
            <choice numeric_identifier="4">50°</choice>
            <choice numeric_identifier="5">72°</choice>
          </choice_list>
        </response_choices>
      </emp_response>
    </task>
  </emp_content>
</emp>

1 个答案:

答案 0 :(得分:0)

据我所知,这是Oracle中XQuery解析器的一个奇怪错误。

似乎.函数中正则表达式中的matches字符导致了问题。此字符出现在否定字符类[^0-9,.:–)%- snrt]中。要确认这一点,请尝试将其从正则表达式中删除,并查看查询是否正常工作。

但是,.可能是你的正则表达式,因为你希望它在那里,所以简单地把它取出可能不适合你。经过一些实验,我发现将.移动到否定字符类的开头可以解决问题,因为我不再会收到有关无效XQuery表达式的错误。

所以,试着替换

matches(.,"[0-9]+[^0-9,.:–)%-  snrt]")

matches(.,"[0-9]+[^.0-9,:–)%-  snrt]")

我已经测试过它可以在Oracle LiveSQL中运行:脚本是here