我在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>
答案 0 :(得分:0)
据我所知,这是Oracle中XQuery解析器的一个奇怪错误。
似乎.
函数中正则表达式中的matches
字符导致了问题。此字符出现在否定字符类[^0-9,.:–)%- snrt]
中。要确认这一点,请尝试将其从正则表达式中删除,并查看查询是否正常工作。
但是,.
可能是你的正则表达式,因为你希望它在那里,所以简单地把它取出可能不适合你。经过一些实验,我发现将.
移动到否定字符类的开头可以解决问题,因为我不再会收到有关无效XQuery表达式的错误。
所以,试着替换
matches(.,"[0-9]+[^0-9,.:–)%- snrt]")
与
matches(.,"[0-9]+[^.0-9,:–)%- snrt]")
我已经测试过它可以在Oracle LiveSQL中运行:脚本是here。