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