sql >> データベース >  >> RDS >> Mysql

大きなxmlから抽出すると、文字列リテラルが長すぎてクエリが失敗します

    解決策:

    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
    



    1. 私のc#アプリケーションで*.sqlmysqlファイルを実行する方法

    2. SQLServerでサブストリングを取得する

    3. MicrosoftTreeViewControlチュートリアル

    4. 順序と制限を使用した奇妙な結果