从 PL/SQL 而不是 Table 中的 XMLType 中提取 CLOB 中的节点值

Extract Node Values within a CLOB from XMLType in PL/SQL and not a Table

假设我将以下 XML 数据分配给 PL/SQL 中 CLOB 类型的局部变量,即:

l_clob := ‘<xml>
  <ticket_order>
    <table_no>1<table_no/>
    <waiter>Jack<waiter/>
    <total_people>12<total_people/>
  </ticket_order>
  <ticket_order>
    <table_no>4<table_no/>
    <waiter>Jackie<waiter/>
    <total_people>3<total_people/>
  </ticket_order>
  <ticket_order>
    <table_no>2<table_no/>
    <waiter>Sally<waiter/>
    <total_people>2<total_people/>
  </ticket_order>
  <ticket_order>
    <table_no>11<table_no/>
    <waiter>Mike<waiter/>
    <total_people>6<total_people/>
  </ticket_order>
</xml>';

所以我没有将这个 XML 存储在 table 列中,因为我想单独在我的 PL/SQL 包过程中处理。

使用上面的 l_clob 变量,然后执行以下操作:

retrieve_all_table_no(p_response => SYS.XMLTYPE.CREATEXML(l_clob));

现在在我的程序中:

retrieve_all_table_no(p_response in XMLType)

如何逐行提取 <table_no> 中的所有节点值?

同样,这不是来自 table,所有这些都是在 PL/SQL 中即时完成的。

我希望能够访问每个单独的值,供我处理,即:

1
4
2
11

我不能使用提取,因为这会连接所有值。

如下解决这个问题,我会在添加到我的程序时更改它,但这实现了我想要的结果。

l_xmlType   XMLTYPE;

l_xmltype := SYS.XMLTYPE.CREATEXML(l_clob);  -- l_clob value from above

select x.*
from xmltable('xml/ticket_order'
    passing l_xmltype
    columns table_no number path 'table_no'
) x;