variables
  • plsql
  • 2013-08-28 56 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)或文件編碼問題。

    相關問題