【问题标题】:SQL - LPX-00242: invalid use of ampersand ('&') character (use &)SQL - LPX-00242:无效使用 & 符号 ('&') 字符(使用 &)
【发布时间】:2020-04-14 21:53:38
【问题描述】:

我正在尝试运行以下 sql 查询。

SELECT sr.resultid, xt2.*
FROM   RESULTS sr,
       XMLTABLE('/extraInfo/resultsViewData'
           PASSING XMLType(sr.extrainfo)
           COLUMNS 
               docketNumber    VARCHAR2(35)  PATH 'docketNumber',
               dateFiled       VARCHAR2(35)  PATH 'dateFiled',
               nosDescription  VARCHAR2(70)  PATH 'nosDescription',
               courtname       VARCHAR2(100) PATH 'courtname',
               chapter         VARCHAR2(35)  PATH 'chapter'
       ) xt2 
WHERE  sr.profileId = '7dd76222';

注意:sr.extrainfo 具有值

'<extraInfo><resultsViewData><courtname>FL Circuit &amp; County - Santa Rosa</courtname></resultsViewData></extraInfo>'

即使我使用'&amp; amp ;' 而不是'&amp;',我仍然收到以下错误,

ORA-31011: XML parsing failed
ORA-19213: error occurred in XML processing at lines 1
LPX-00242: invalid use of ampersand ('&') character (use &amp;)
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
31011. 00000 -  "XML parsing failed"
*Cause:    XML parser returned an error while trying to parse the document.
*Action:   Check if the document to be parsed is valid.

有时我什至得到错误,

LPX-00242: invalid use of ampersand ('&') character (use &amp;amp;) 

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 能和这个类似吗? asktom.oracle.com/pls/apex/…
  • 无法复制此db<>fiddle。请问edit你的问题是minimal reproducible example,它足够完整,我们可以执行它并产生错误吗?
  • @MT0 我的项目中使用的 XML 要大得多。为了简单起见,我只是使用了一个较小的 xml,因此问题没有被重现。我现在使用 '&' 而不是 '&'在 extrainfo 中,我正在使用 PASSING XMLType(DBMS_XMLGEN.CONVERT(sr.extrainfo)) 因为我在某处读到 DBMS_XMLGEN.CONVERT 可用于转义 &。但我收到错误“LPX-00210:预期的“

标签: sql oracle xmltype


【解决方案1】:

试试:

set define off;

然后执行你的查询;

如果您想了解更多关于 set define off; 做什么的信息:When or Why to use a "SET DEFINE OFF" in Oracle Database

【讨论】:

  • 如果这是带有define 并设置为默认&amp; 字符的SQL*Plus,它肯定不会将&amp; 字符传递给数据库吗?我希望它会要求 amp 的值。
  • 是的。当您尝试执行查询时使用define on,它会要求您传递amp 的值。
  • 看来问题不是由替换变量设置引起的。
【解决方案2】:

我一开始无法重现您的问题。

但是,如果您遇到问题,请尝试使用dbms_xmlgen.convert 将您的字符串转换如下:

'<extraInfo><resultsViewData><courtname>'
|| dbms_xmlgen.convert('FL Circuit & County - Santa Rosa')
|| '</courtname></resultsViewData></extraInfo>' 

db<>fiddle demo

干杯!!

【讨论】:

  • 我试过这个,但我得到“LPX-00210:预期的'
  • 这意味着您的 XML 无效。您是否尝试使用问题中显示的字符串?或任何其他字符串?对于问题中给出的字符串,它工作得非常好,从 DB fiddle 可以看出
  • PASSING XMLType(DBMS_XMLGEN.CONVERT(sr.extrainfo)) 导致上面我提到的错误
  • 我使用的是更大的 XML,而不是我在这里提到的那个。我无法将 dbms_xmlgen.convert 用于 XML 中的特定部分,因为它的大量 XML 已经存储在 DB 中。所以'&'可以出现在任何地方。因此,我厌倦了在 PASSING XMLType() 中使用 dbms_xmlgen.convert 但我收到了我提到的错误
  • 我觉得 XML 是有效的,因为即使在提琴手中,如果您将其更改为 PASSING XMLType(DBMS_XMLGEN.CONVERT(sr.extrainfo)), LPX-00210: expected '
猜你喜欢
  • 2012-10-19
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多