【发布时间】:2017-09-20 05:46:55
【问题描述】:
首先,我参考了所有有关通过 PL/SQL 块操作 XML 标记的相关问题,但没有运气
所以,我的要求是:我有一个带有 CLOB 列的表,其中包含 XML 格式的数据,不是线性方式
请参考下面的例子
<DATA>
<TAGA>
<TAGB>
<TAGC>
<TAGD>
<TAG1>value1</TAG1>
<TAG2>value2</TAG2>
</TAGD>
**<MAINTAG>
<Name>student_id</Name>
<batch_id>2017</batch_id>
<Values>1001</Values>
</MAINTAG>**
**<MAINTAG>
<Name>student_type</Name>
<batch_id>2017</batch_id>
<Values>B</Values>
</MAINTAG>**
</TAGC>
</TAGB>
</TAGA>
</DATA>
在这里,我想根据学生 ID 将所有具有 student_type 值的表行从“B”更新为“A”
但是,这里在两个标签中,只有batch_id是通用的,所以需要先检查batch_id和对应的学生id
这里 <batch_id, student> 将是唯一的一对,例如 ,
我尝试通过 Merge into script 但不知何故无法在整个 XML 数据中搜索特定标签
请参考以下脚本
Student_Temp 包含列 student_id 和 batch_id 的表
declare
v_rows number;
begin
for i in 0..99
loop
merge into Student s
using Student_Temp st on
(
st.student_id=s.student_id
and s.sub_id = 3008
)
when matched then
update set s.general_data = replace(s.general_data,'<Values>A</Values>','<Values>B</Values>')
where s.general_data like '%<Value>B</Value>%'
and s.general_data like '%st.batch_id%'
and s.general_data like '%st.student_id%'
and s.general_data like '%student_type%';
end loop;
end;
谢谢
【问题讨论】:
标签: sql oracle plsql clob xmltype