从 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;
假设我将以下 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;