Oracle sql从字符串中删除特定标记

Oracle sql从字符串中删除特定标记,sql,oracle,plsql,Sql,Oracle,Plsql,我想要一个传递文本varchar2和标记名的函数 并返回已删除标记及其子标记的文本 只保留 我不知道标签下儿童的水平如何 输入: set serverouput on declare v_input_str varchar(4000) := ' <parent1> <Message>12ab</Message> <CreationDate>02/08/2015</Creation

我想要一个传递文本varchar2和标记名的函数 并返回已删除标记及其子标记的文本 只保留

我不知道标签下儿童的水平如何

输入:

set serverouput on
declare
v_input_str  varchar(4000) := '        <parent1>
            <Message>12ab</Message>
            <CreationDate>02/08/2015</CreationDate>
            <Total>500.45</Total>
            <Collect>
                <Name>Peter</Name>
            </Collect>
        </parent1>';
begin
 dbms_output.put_line(v_input_str);

end;
/


output :
'        <parent1>
            <Message>12ab</Message>
            <CreationDate>02/08/2015</CreationDate>
            <Total>500.45</Total>
            <Collect/>
        </parent1>'
提前感谢

您可以为此使用deleteXML

假设您的参数标记存储在标记变量中,请执行以下操作:

declare
    v_input_str  clob := '        <parent1>
            <Message>12ab</Message>
            <CreationDate>02/08/2015</CreationDate>
            <Total>500.45</Total>
            <Collect>
                <Name>Peter</Name>
            </Collect>
        </parent1>';
    tag varchar2(20) := 'Collect';
begin
    select deleteXML(xmltype(v_input_str), '//'||tag||'/*').getClobVal() into v_input_str from dual;
    dbms_output.put_line(v_input_str);
end;
输出:

<parent1><Message>12ab</Message><CreationDate>02/08/2015</CreationDate><Total>500.45</Total><Collect/></parent1>

谢谢你的回答。它对我有用。但是,对齐不是最初的。为什么对齐很重要?