设置变量时使用双引号

时间:2013-08-28 15:45:26

标签: variables plsql

我有一个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:当期待其中一个时遇到符号“”   以下内容:

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

如@a_horse_with_no_name所述:

  

双引号不是你的问题。

您误读了错误消息:

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

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

答案 2 :(得分:-2)

也许你应该尝试逃避它们?

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