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

OracleのCDATA内のデータを解析する方法

    Oracle 12では、次のことができるはずです。

    SELECT tenantId
    FROM   your_table t
           LEFT OUTER JOIN
           XMLTABLE(
             '/PayLoad/.'
             PASSING XMLTYPE( t.your_xml_column )
             COLUMNS cdata CLOB PATH '.'
           ) x
           ON ( 1 = 1 )
           LEFT OUTER JOIN
           JSON_TABLE(
             x.cdata,
             '$'
             COLUMNS ( tenantId VARCHAR2(10) PATH '$.order.tenantId' )
           ) j
           ON ( 1 = 1 );
    

    (次の数時間は11gを使用しているため、テストされていません)

    Oracle 11の場合:

    SELECT REGEXP_SUBSTR( x.cdata, '"tenantId":"((\\"|[^"])*)"', 1, 1, NULL, 1 ) AS tenantId
    FROM   your_table t
           LEFT OUTER JOIN
           XMLTABLE(
             '/PayLoad/.'
             PASSING XMLTYPE( t.your_xml_column )
             COLUMNS cdata CLOB PATH '.'
           ) x
           ON ( 1 = 1 )
    

    または(JSON文字列がXMLの別のブランチで発生しない場合)、次を使用できます:

    SELECT REGEXP_SUBSTR(
             your_xml_column,
             '"tenantId":"((\\"|[^"])*)"',
             1,
             1,
             NULL,
             1
           ) AS tenantId
    FROM   your_table
    


    1. サーバーでMySQLの低速クエリログを有効にするにはどうすればよいですか?

    2. Oracleのデータベーススキーマをダンプファイルにエクスポートする方法

    3. Oracleで識別子が長すぎます

    4. SUMと3つのテーブルを使用したMySQLJOIN