Variables 设置变量时使用双引号

Variables 设置变量时使用双引号,variables,plsql,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字段要大得多。我的问题是,我不知道如何

我有一个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:在期望一个 以下:


也许你应该试着逃离他们

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

双引号不是你的问题。 请参见此处的SQLFIDLE示例:

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

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

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示例:

作为@a_horse_,并声明了_no_名称:


双引号不是你的问题

您误读了错误消息:

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

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

双引号在带单引号的字符串文字中没有特殊意义。包括PL/SQL在内的SQL没有任何类似的转义语法。