1

我有一个 PL/SQL 脚本,我试图在其中填充一个包含 XML 数据的 CLOB。

DECLARE
  bigtext1   VARCHAR2 (32767);
BEGIN

  bigtext1 :='<?xml version="1.0" encoding="utf-8"?>';

  UPDATE SCREEN SET XML=bigtext1
  WHERE SCREEN_REF='TEST';
END;

这只是一个例子,在我的实际使用中,bigtext1 字段要大得多。我的问题是我无法弄清楚如何在 bigtext1 变量的设置中使用双引号。我不断收到此错误:

PLS-00103:在预期以下情况之一时遇到符号“”:

4

3 回答 3

1

双引号不是你的问题。
请参阅此处的 SQLFiddle 示例:http ://sqlfiddle.com/#!4/054bc/1

我的猜测是您的 XML 中有其他一些单引号,这导致了问题。

为了克服这个问题,您可以使用备用报价机制(手册中的详细信息)。您只需要找到一些绝对不属于您的 XML 的字符。Assuzming 是 eg §,你可以像这样编写你的代码:

DECLARE
  bigtext1   VARCHAR2 (32767);
BEGIN

  bigtext1 := q'§<?xml version="1.0" encoding="utf-8"?>§';

  UPDATE SCREEN SET XML=bigtext1
  WHERE SCREEN_REF='TEST';
END;
/

我通常还将开始和结束分隔符放在自己的行中,以使阅读代码更容易:

DECLARE
  bigtext1   VARCHAR2 (32767);
BEGIN

  bigtext1 := 
  q'§
     <?xml version="1.0" encoding="utf-8"?>
     <foo id='bar' code="hello">Hello, World</foo>
  §';

  UPDATE SCREEN SET XML=bigtext1
  WHERE SCREEN_REF='TEST';
END;
/

注意 XML 中嵌入的单引号和双引号,无需以任何方式屏蔽它们。在此处查看修改后的 SQLFiddle 示例:http ://sqlfiddle.com/#!4/054bc/7

于 2013-08-28T16:27:19.577 回答
0

正如@a_horse_with_no_name 所说:

双引号不是你的问题。

您误读了错误消息:

PLS-00103: Encountered the symbol " " when expecting one of the following:

这并不是说双引号是意外符号 - 引号是错误消息的一部分。它抱怨的符号在引号内。在这种情况下,符号呈现为空格,所以我打赌行尾(crlf vs. lf)或文件编码问题。

于 2013-08-29T13:53:14.913 回答
-2

也许您应该尝试逃脱它们?

bigtext1 :='<?xml version=\"1.0\" encoding=\"utf-8\"?>';
于 2013-08-28T15:51:53.817 回答