【问题标题】:Extracting from a big xml the query is failing with string literal too long从大 xml 中提取查询因字符串文字太长而失败
【发布时间】:2014-01-31 21:23:05
【问题描述】:

这个问题是关于我无法解析大 xml 的地方。 Question reference link

当 xml 的大小很大时,当前为 250 kb,解析失败 字符串文字太长。

请在下面找到解决方案:

【问题讨论】:

    标签: mysql sql xml oracle xml-parsing


    【解决方案1】:

    解决方案:

    1.

        CREATE OR REPLACE FUNCTION  APE9_BLOB_2_CLOB(L_BLOB BLOB) RETURN CLOB IS
            L_CLOB         CLOB;
            L_SRC_OFFSET      NUMBER;
            L_DEST_OFFSET  NUMBER;
            L_BLOB_CSID       NUMBER := DBMS_LOB.DEFAULT_CSID;
            V_LANG_CONTEXT NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
            L_WARNING         NUMBER;
            L_AMOUNT  NUMBER;
          BEGIN
           DBMS_LOB.CREATETEMPORARY(L_CLOB, TRUE);
            L_SRC_OFFSET     := 1;
            L_DEST_OFFSET := 1;
            L_AMOUNT := DBMS_LOB.GETLENGTH(L_BLOB);
            DBMS_LOB.CONVERTTOCLOB(L_CLOB,
                                   L_BLOB,
                                   L_AMOUNT,
                                   L_SRC_OFFSET,
                                   L_DEST_OFFSET,
                                   1,
                                   V_LANG_CONTEXT,
                                   L_WARNING);
            RETURN L_CLOB;
          END;
        /
    

    2.

    SELECT  XMLTYPE (APE9_BLOB_2_CLOB (XML_LOB )) PROFILE  
    FROM APE1_XML_DISTRIB 
    WHERE FILE_TYPE='Provider ID list' AND RELEASE_NAME='EPC_TO_PUB'
    

    3.

        SELECT * FROM (
        WITH ET AS(
             SELECT 
                    (SELECT  XMLTYPE (APE9_BLOB_2_CLOB (XML_LOB )) PROFILE  FROM APE1_XML_DISTRIB WHERE FILE_TYPE =  'Provider ID list' AND RELEASE_NAME='EPC_TO_PUB' ) AS  XT
              FROM DUAL
               ) 
                SELECT     
                    EXT.*
                   FROM
                   ET,
                   XMLTABLE(
                   'for $SF in $GRP_2_ID/AuxiliaryType/AuxiliaryObject
                        for $SFItem in $SF/Row
                          return <row> 
                          {
                            $SF
                            ,$SFItem
                          } 
                          </row>'           
                      PASSING ET.XT AS GRP_2_ID
                      COLUMNS
                      ID   Number         PATH 'AuxiliaryObject/@id'  ,
                       PROVIDER_GROUP                 VARCHAR2  (256)       PATH 'AuxiliaryObject/@name' ,  
                       Index_id Number PATH 'Row/Index',              
                      PROVIDER_ID_DESC        VARCHAR2  (256)       PATH 'Row/Provider_ID_description',
                      PROVIDER_ID  VARCHAR2  (64)       PATH 'Row/Provider_ID'
                       ) EXT  
                       ) order by ID,Index_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      相关资源
      最近更新 更多