需要通过在Oracle DB中查询xmltype值来解析它

5ssjco0h  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(159)

我们需要使用select语句从xmltype列中捕获值。下面是我们在“测试”列中的值。

<c18>A</c18><c18 m="2">B</c18><c18 m="3">C</c18><c18 m="4"D</c18><c18 m="5">E</c18><c18 m="6">F</c18><c18 m="7">G</c18><c18 m="8">H</c18>

我们需要有8个新的列,应该命名为“C1”,“C2”等具有值A,B,C等。

wtlkbnrh

wtlkbnrh1#

您的XML无效(在m="4"之后缺少结束>并且没有根元素)。如果你解决了这个问题,那么你可以用途:

SELECT x.*
FROM   table_name t
       CROSS APPLY XMLTABLE(
         '/root'
         PASSING t.test
         COLUMNS
           c1 VARCHAR2(20) PATH './c18[not(@m)]',
           c2 VARCHAR2(20) PATH './c18[@m="2"]',
           c3 VARCHAR2(20) PATH './c18[@m="3"]',
           c4 VARCHAR2(20) PATH './c18[@m="4"]',
           c5 VARCHAR2(20) PATH './c18[@m="5"]',
           c6 VARCHAR2(20) PATH './c18[@m="6"]',
           c7 VARCHAR2(20) PATH './c18[@m="7"]',
           c8 VARCHAR2(20) PATH './c18[@m="8"]'
       ) x

其中,对于样本数据:

CREATE TABLE table_name (test XMLTYPE);

INSERT INTO table_name (test)
VALUES (XMLTYPE( '<root><c18>A</c18><c18 m="2">B</c18><c18 m="3">C</c18><c18 m="4">D</c18><c18 m="5">E</c18><c18 m="6">F</c18><c18 m="7">G</c18><c18 m="8">H</c18></root>' ) );

输出:
| C1| C2| C3| C4| C5| C6| C7| C8|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 一个|B| C类|D级|E级|F型|G级|H型|
fiddle

相关问题