2017-09-20 81 views
-1

首先,我refered關於通過PL/SQL塊,但沒有運氣搜索在CLOB列特別優惠存儲在Oracle中

所以操作XML標籤相關的所有問題,XML數據和更新值,我requiremet是:我有一個表與具有XML形式的數據CLOB列這是不以線性方式

請參閱例如

<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> 

在此以下,我想更新所有與來自「B」 student_type值表中的行以'A'爲基礎的學生編號爲

但是,在這裏兩個標籤,只有BATCH_ID是常見的,所以需要先檢查BATCH_ID,並檢查相應的學生證

這裏<batch_id, student>是將是唯一的對像< 2017,1001>,< 2017,1002>

我通過合併試圖進入劇本,但不知何故無法搜索在整個XML數據

特定的標籤,請參考下面的腳本的列柱

Student_Temp表ent_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; 

感謝

回答

1

在這裏,我想從 'B' 基於學生證

'A' 更新所有student_type值錶行。當我看到你的更新報告,它看起來像你試圖搜索A,並用B替換它,並在你的XML中我看不到A,所以你不是真的找到Update發生。看到你的更新語句,

update set s.general_data = replace(s.general_data,'<Values>A</Values>','<Values>B</Values>') 

理想的情況下應該是:

update set s.general_data = replace(s.general_data,'<Values>B</Values>','<Values>A</Values>') 

見下面一個簡單的選擇與replace工作。

select col , replace(col,'<Values>B</Values>','<Values>A</Values>') replaced_data 
from 
(select '<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>' col 
from dual) 

此外,我沒有理解for循環for i in 0..99的用法。不知道你的意圖是什麼,但你只是想用相同的數據集嘗試100次。對我來說看起來多餘。

+0

我剛剛發佈了XML文件的一部分,但可能會出現TAG層次結構不相同的情況,那麼上面提到的查詢將不起作用 –

+0

@KiranChoudhary。替換與標籤層次結構無關。你可以試試。據我說,它應該在所有情況下工作 – XING