【问题标题】:Getting error for if condition in xslt on string comparison字符串比较时 xslt 中的 if 条件出错
【发布时间】:2016-07-27 08:38:31
【问题描述】:

我正在尝试将节点的值与字符串进行比较,但它会抛出如下错误:

ORA-06550:第 264 行,第 40 列:PLS-00103:遇到符号“Y” 预期以下情况之一时:

_= - + ;在 in 是 mod 余数不是 rem or!= or ~=>= and or like like2 like4 likec 之间 ||多集成员子多集 在“Y”之前插入符号“”以继续。

下面是我的代码:

<xsl:if test="/email/threshold/text() = 'Y'">

如果我从“Y”中删除单引号,它将不满足条件。我错过了什么? 使用下面的代码也不起作用。

<xsl:if test="not(normalize-space(email/threshold)=N)">

【问题讨论】:

  • 您确定是 XSLT 导致了问题吗?我看到你已经标记了这个“oracle”并且“ORA-06550”是一个 Oracle 错误,所以可能原因在其他地方?谢谢。
  • 是的@TimC。没有它,代码可以完美运行
  • 这是您代码的一小部分。我想这个片段实际上是一个字符串的一部分,所以你需要转义 Y 周围的单引号,但很难从中分辨出来。
  • 是的,在逃脱它之后,它起作用了。这很奇怪,因为早些时候在另一个数据库服务器中相同的代码工作正常。更改数据库后,这个错误浮出水面。 Oracle 版本已更改

标签: oracle xslt plsqldeveloper


【解决方案1】:

可能的解释是您显示的片段是字符串文字的一部分,在这种情况下,您需要转义 Y 周围的单引号(因此第一个单引号不会被解释为结尾该字符串,将Y 留在字符串之外):

<xsl:if test="/email/threshold/text() = ''Y''">

或使用the alternative quoting mechanism,因此无需转义。

你可以用一个简单的匿名块看到同样的东西:

declare
  x varchar2(200);
begin
 x:='...
<xsl:if test="/email/threshold/text() = 'Y'">
...';
end;
/

Error report -
ORA-06550: line 5, column 42:
PLS-00103: Encountered the symbol "Y" when expecting one of the following:
...

但是这些都可以编译:

declare
  x varchar2(200);
begin
 x:='...
<xsl:if test="/email/threshold/text() = ''Y''">
...';
end;
/

declare
  x varchar2(200);
begin
 x:=q'|...
<xsl:if test="/email/threshold/text() = ''Y''">
...|';
end;
/

.. 后者使用条形符号 | 作为 quote_delimiter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多