variables
  • plsql
  • 2013-08-28 59 views 1 likes 
    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: Encountered the symbol " " when expecting one of the following:

    回答

    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

    -2

    也许你应该试试逃脱它们?

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

    双引号在带有单引号的字符串文字中没有特殊含义。而SQL(包括PL/SQL)没有像这样的转义语法。 –

    0

    由于@a_horse_with_no_name说:

    The double quotes are not your problem.

    你误读了错误消息:

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

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

    相关问题