我有一个名为customer
的表格,我有id
,sortcode
和name
列。
我还有一个名为tblxml
的表,它有一个名为xmlData
的CLOB类型的列,它存储XML数据。
我已按如下方式存储XML数据:
<root>
<nd>
<id>1</id>
<sc>001</sc>
</nd>
<nd>
<id>2</id>
<sc>001001</sc>
</nd>
<nd>
<id>11</id>
<sc>001001001</sc>
</nd>
<nd>
<id>16</id>
<sc>001001001001</sc>
</nd>
<nd>
<id>13</id>
<sc>001001002</sc>
</nd>
<nd>
<id>9</id><sc>001002</sc>
</nd>
<nd>
<id>14</id>
<sc>001002001</sc>
</nd>
</root>
我已将它对齐,因此很容易理解。
我需要:
tblxml
中提取此XML数据并在customer
中更新
表Id
表中提取tblxml
并更新{id}中与{id}匹配的sortcode
。 我已使用customer
分隔行。
由于我是Oracle的新手,我还没有尝试过编码。期待一些建议。
答案 0 :(得分:1)
with sample_data as (select '<root><nd>
<id>1</id>
<sc>001</sc>
</nd>
<nd>
<id>2</id>
<sc>001001</sc>
</nd>
<nd>
<id>11</id>
<sc>001001001</sc>
</nd>
<nd>
<id>16</id>
<sc>001001001001</sc>
</nd>
<nd>
<id>13</id>
<sc>001001002</sc>
</nd>
<nd>
<id>9</id><sc>001002</sc>
</nd>
<nd>
<id>14</id>
<sc>001002001</sc>
</nd></root>' xdata from dual)
-- end of mimicking a table called "sample_data" containing your xml data. See the main SQL below:
select id,
sc
from sample_data sd
cross join xmltable('/root/nd'
passing xmltype(sd.xdata)
columns id number path 'id',
sc varchar2(10) path 'sc');
ID SC
---------- ----------
1 001
2 001001
11 001001001
16 0010010010
13 001001002
9 001002
14 001002001
之类的声音就像你之后的那样:
byteArray
一旦有了从xml列中提取结果的查询,就可以将其用作更新或合并语句的一部分来进行必要的更新。这是留给你的练习 - 在StackOverflow和Google中有很多例子!如果您遇到困难,请随时使用您尝试过的内容更新您的问题。
答案 1 :(得分:0)
我已经解决了这个问题。
然后从 TMP_XML 中提取值,如下所示,并根据匹配的 Id 更新 sortcode 。
Insert InTo TMP_XML
Select XmlType(PkgCBDmlXml.ExtractNodeValues(xmlData, 'root'))
From tblxml;
update customer
set sortcode = ( Select ExtractValue(Value(E),'//sc') Sc_New
From TMP_XML A,
TABLE(XmlSequence(Extract(A.hold_xml, '//nd'))) E
Where ExtractValue(Value(E),'//id') = id
)